如何更新ViewPager片段数据?

时间:2016-04-20 09:34:48

标签: android android-fragments

大家好,我有一个阅读应用程序,我建立了一个视图寻呼机,包含三个片段, bookFragment chapterFragment verseFragment

我想在用户选择一个书籍项目时更新 chapterFragment verseFragment ,但片段UI仍然没有退出,所以我无法执行refreshUI OnPagerSelected。

有什么方法可以做到这一点?

以下是我的适配器:

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    private int[] title = {R.string.label_book, R.string.label_chapter, R.string.label_verse};

    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return bookFragment = new SelectionBookFragment();

            case 1:
                return chapterFragment = new SelectionChapterFragment();

            case 2:
                return verseFragment = new SelectionVerseFragment();
        }
        return new Fragment();
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return getResources().getString(title[position]);
    }
}
当我这样做时,

并且片段UI为空:

Fragment fragment = screenSlidePagerAdapter.getItem(CHOOSER_CHAPTER);
fragment.refreshUI() <-- null

非常感谢!

2 个答案:

答案 0 :(得分:1)

如果片段不存在,则在显示时将调用方法onCreateView()。您可以在此处设置图书的数据 如果片段存在,您可以拨打refreshUI() 我认为您只需在致电fragment != null时查看refreshUI()

答案 1 :(得分:0)

一种简单而肮脏的方法是强制ViewPager创建所有Fragment实例并通过调用

来保留它们
viewPager.setOffscreenPageLimit(2);

另一种方法是将所选值保存在SharedPreferences中,然后在显示页面时检索该值。

SharedPreferences settings = getSharedPreferences(SELECTED_BOOK, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putInt("selectedBook", 3);