0

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"
            }
        }
    }
}
bmurmistro
  • 1,040
  • 1
  • 16
  • 35

0 Answers0