Dmitriy Puchkov
Dmitriy Puchkov

Reputation: 1601

Android activity with ListView open fragment on item click

I have an Activity with ListView, when clicking on a list item opens a new fragment. Do I need to create a new fragment every time like this?

     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
     fragmentTransaction.add(R.id.root_layout,new MyFragment());

Or will be enough to create a fragment once and then use it?

in activity:

     MyFragment myFragment = new MyFragment();
     ......

in onItemClickListener:

     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
     fragmentTransaction.add(R.id.root_layout,myFragment);

Upvotes: 0

Views: 7738

Answers (3)

Mark
Mark

Reputation: 5566

It depends on your case. In most cases every list item opens a different fragment (with different data). Then you have to make a static newInstance(Data mySerializableData) method in your fragment, use default constructor inside of it, pass data over Fragment arguments See DetailFragment and use fragmentTransaction.replace() in your activity to add this fragment.

When you dont want your fragment to be changed you can create it only once as you say but there is no need of adding it on every item click. So one creation and only one add.

Upvotes: 1

Rohit Goswami
Rohit Goswami

Reputation: 617

check instance of that fragment everytime like this-

In your fragment class -

public static final MyFragment newInstance()
{
    MyFragment f = new MyFragment();
    return f;
}

and in your activity when you want to create fragment -

 FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
 fragmentTransaction.add(R.id.root_layout,MyFragment.newInstance());

this is well n good manner...

Upvotes: 1

Thomas R.
Thomas R.

Reputation: 8073

No, you don't need to create it every time. First, instead of using "add", use "replace". If there is no fragment in fragment manager, your fragment will be added, instead it will be replaced. If you use "add", then you could accidentally add more than one fragment.

You should check for the fragment in the fragment manager and call methods for content updates.

Example:

myFragment = (MyFragment) fragmentManager.findFragmentById(R.id.my_fragment);
if (myFragment == null) {
  myFragment = MyFragment.getInstance(someDataIfNeeded);
  fragmentManager.beginTransaction().replace(R.id.my_fragment, myFragment).commit();
} else {
  myFragment.updateFragmentContent(someData);
}

Upvotes: 1

Related Questions