-
-
Save alexfu/5797429 to your computer and use it in GitHub Desktop.
public class FragmentObserver extends Observable { | |
@Override | |
public void notifyObservers() { | |
setChanged(); // Set the changed flag to true, otherwise observers won't be notified. | |
super.notifyObservers(); | |
} | |
} |
public class MyActivity extends Activity { | |
private MyAdapter mPagerAdapter; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
setContentView(R.layout.my_activity); | |
ViewPager pager = (ViewPager) findViewById(R.id.pager); | |
mPagerAdapter = new MyAdapter(); | |
pager.setAdapter(mPagerAdapter); | |
} | |
private void updateFragments() { | |
mPagerAdapter.updateFragments(); | |
} | |
} |
public class MyAdapter extends FragmentPagerAdapter { | |
private Observable mObservers = new FragmentObserver(); | |
public MyAdapter(FragmentManager fm) { | |
super(fm); | |
} | |
@Override | |
public Fragment getItem(int position) { | |
mObservers.deleteObservers(); // Clear existing observers. | |
Fragment fragment = new MyFragment(); | |
if(fragment instanceof Observer) | |
mObservers.addObserver((Observer) fragment); | |
return fragment; | |
} | |
public void updateFragments() { | |
mObservers.notifyObservers(); | |
} | |
} |
public class MyFragment extends Fragment implements Observer { | |
/* Fragment related stuff... */ | |
@Override | |
public void update(Observable observable, Object data) { | |
View root = getView(); | |
// Update your views here. | |
} | |
} |
Work fine! For notify all fragments remove mObservers.deleteObservers
. Work great for me.
For notify with object change your implementation of FragmentObserver:
public class FragmentObserver extends Observable {
@Override
public void notifyObservers(object: Object) {
setChanged(); // Set the changed flag to true, otherwise observers won't be notified.
super.notifyObservers(object);
}
}
Not updating current visible fragment proper by passing data from activity ?
If anybody can help, Thanks.
I want to update only current visible fragment in viewpager, so I'm using
mObservers.deleteObservers();
before addObserver(-)
And sending data from activity like:
@Override
public void onTabSelected(TabLayout.Tab tab) {
int p =tab.getPosition();
viewPager.setCurrentItem(p);
myPagerAdapter.updateFragments(p);
}
And receiving data in fragment like:
@Override
public void update(Observable observable, Object o) {
Integer i = (Integer) o;
tv.setText("TAB " + i);
Log.i(TAG, "=== " + i);
}
Data receiving well, But UI not updating in some cases:
case1: On the first launch first page not show updates, after swipe and come back it shows update ?
case2: On the first launch If we start page scrolling using Tab click UI not update proper, while if we start page scrolling using finger swipe it works well and after that Tab click also works well ?
hello everyone who commented in this code can you tell me is this is really working or not because when i implementing this is not working
How can we send array list through object like here
public void updateFragments() {
mObservers.notifyObservers(); // <-- here
}
and access it in MyFragment -> update(Observable observable, Object data) ??
Thanks Man! You Save my Day
Work fine! For notify all fragments remove
mObservers.deleteObservers
. Work great for me.
For notify with object change your implementation of FragmentObserver:public class FragmentObserver extends Observable { @Override public void notifyObservers(object: Object) { setChanged(); // Set the changed flag to true, otherwise observers won't be notified. super.notifyObservers(object); } }
In Kotlin:
class FragmentObserver : Observable() {
override fun notifyObservers(arg: Any?) {
setChanged(); // Set the changed flag to true, otherwise observers won't be notified.
super.notifyObservers(arg)
}
}
public class MyFragment extends Fragment implements Observer {
/* Fragment related stuff... */
@OverRide
public void update(Observable observable, Object data) {
View root = getView();
// Update your views here.
System.out.println("Check View-->"+root);
}
}
My root is retrurning null. Kindly assist