I have an activity that uses a view pager with 2 tabs. The first tab collects a number of inputs (about 20 EditText fields). The second tab displays a summary of what has been entered along with any validation errors. When the tab layout is initialized, both fragments are initialized. While I expect this behavior, I'm not sure what is the best way to update the contents of fragment 2 after a user has changed data in the first tab. I'm not using any listviews or anything like that in fragment 2, it's basically just a bunch of TextViews. Does it make sense to simply recreate fragment 2 if something has changed? If so how? Or is there a more elegant solution? Here is my activity:
public class SomeActivity extends BaseActivity implements OnDataPass, OnDataError {
private Tab1Fragment tab1Fragment;
private Tab2Fragment tab2Fragment;
private SomeData;
...
@Override
public SomeData getSomeData() {
return data;
}
@Override
public void error(List<Error> errors) {
// we have errors, need to update tab2
@Override
public void dataChanged() {
// we need to update tab 2 as it has stale data
}
@Override
public void onCreate(Bundle savedInstanceState) {
// get some data and setup the view pager
....
}
public class ViewPagerAdapter extends FragmentPagerAdapter {
private int tabSize = 2
Context context;
public ViewPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public Fragment getItem(int position) {
MyTab selectedTab = selectedTab.getById(position);
switch (position) {
case 0:
tab1Fragment = Tab1Fragment.newInstance();
return tab1Fragment;
case 1:
tab2Fragment = Tab2Fragment.newInstance();
return tab2Fragment;
}
return null;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
super.destroyItem(container, position, object);
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
}
@Override
public int getCount() {
return tabSize;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "tab 1"
case 1:
return "tab 2"
}
}
}
}