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.
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.
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.
You can use startActivityForResult(or broadcast/receiver) to get the result from the activity. Then use adapter. notifyDataSetChanged to refresh the fragment.
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 .*
mainActivity I overrided the onResume and did the following
if (!(mPagerAdapter == null)) { mPagerAdapter.notifyDataSetChanged(); } I ovveride the getItemPosition() in mPagerAdapter and make it return POSITION_NONE.
@Override public int getItemPosition(Object object) { return POSITION_NONE; } works like charm
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With