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 Fragment
s, 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