Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to recreate all fragments in ViewPager:

Tags:

I have this problem, I have a FragmentActivity with a ViewPager and a ViewPagerAdapter.

In this ViewPager I have 3 Fragments that each of them contains a TableLayout that gets populated programmaticly using a 2dArrayList.

on a click of a button in the FragmentActivity layout, I filter the data in the 2dArrayList and basically need to recreate all 3 Fragments with the new dataset (run the onCreateView method in all of them).

So I create an onClickListener for this button:

 private class SlicerSelectedOnClickListener implements OnClickListener {      private ODSharedSlicer slicer;      public SlicerSelectedOnClickListener(ODSharedSlicer slicer) {         super();         this.slicer = slicer;     }      public void onClick(View v) {         String slicerValue = ((Button) v).getText().toString();         Log.d(TAG,"Slicer value: "+ slicerValue +" chosen");         application.currentReport.getODSharedSlicers().get(0).getSharedSlicerSelectedMemebers().add(slicerValue);          ViewGroup parent = (ViewGroup) ((Button) v).getParent();          for (int i = 0; i < parent.getChildCount(); i++)          {             if ((parent.getChildAt(i) != v) && (parent.getChildAt(i) instanceof ToggleButton))             {                 ((ToggleButton) parent.getChildAt(i)).setChecked(false);             }         }          mPagerAdapter.notifyDataSetChanged();     } } 

As you can see I have a mPagerAdapter.notifyDataSetChanged(); As suggested here:

How to recreate fragment with viewpager intentionally?

at the end of this method, So I expect the adapter to recreate all the Fragments, but the onCreateView from any of the fragments never runs.

Can any one suggest what am I doing wrong. any assistance would be appreciated.

like image 435
Emil Adz Avatar asked May 21 '13 13:05

Emil Adz


People also ask

How do I recreate fragments?

attach() for recreating the fragment. Re-attach a fragment after it had previously been deatched from the UI with detach(Fragment). This causes its view hierarchy to be re-created, attached to the UI, and displayed. Detach the given fragment from the UI.

How do I refresh a ViewPager fragment?

OnPageChangeListener is the correct way to go, but you will need to refactor your adapter a bit in order to keep a reference to each Fragment contained in the FragmentPagerAdapter. Then, instead of creating a new Fragment, use the one contained in the adapter: mViewPager. addOnPageChangeListener(new ViewPager.

How do I refresh FragmentPagerAdapter?

You can use startActivityForResult(or broadcast/receiver) to get the result from the activity. Then use adapter. notifyDataSetChanged to refresh the fragment.


1 Answers

for those who still face the same problem which I faced the same problem when I have ViewPager with seven fragment. the default for these fragments to load the English content from the service but the problem here that I want to change the language from settings activity and after finish settings activity I want ViewPager in main activity to refresh the fragment to match the language selection from the user and load the Arabic content if user choose Arabic here what I did to work from the first trr :D

1. you must use FragmentStatePagerAdapter .*

  1. mainActivity I overrided the onResume and did the following

     if (!(mPagerAdapter == null)) {           mPagerAdapter.notifyDataSetChanged();        } 
  2. I ovveride the getItemPosition() in mPagerAdapter and make it return POSITION_NONE.

     @Override      public int getItemPosition(Object object) {           return POSITION_NONE;      } 

works like charm

like image 143
Ziad Gholmish Avatar answered Oct 05 '22 07:10

Ziad Gholmish