Skip to content

Instantly share code, notes, and snippets.

@hackstarsj
Forked from alexfu/FragmentObserver.java
Created July 17, 2019 19:05
Show Gist options
  • Save hackstarsj/94cede8358c801b704cc5eb23852f1fe to your computer and use it in GitHub Desktop.
Save hackstarsj/94cede8358c801b704cc5eb23852f1fe to your computer and use it in GitHub Desktop.
Observer pattern for notifying Fragments of a ViewPager to update their views. This will update the current Fragment, as well as the off screen Fragments that are retained.
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.
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment