ViewPager TabLayout问题:选项卡片段内容仅在最后一个选项卡被刷到

时间:2017-05-15 14:22:52

标签: android android-fragments android-viewpager android-tablayout

我有一个ViewPager,我动态添加3个标签片段:

 private void addTabs(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new QuotesFragment(), "Quotes");
    adapter.addFragment(new BooksFragment(), "Books");
    adapter.addFragment(new ExercisesFragment(), "Exercises");
    viewPager.setAdapter(adapter);
}

以下是未按预期工作的片段代码:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {

    recyclerView = (RecyclerView) getActivity().findViewById(R.id.quotes_recycler);
    layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(layoutManager);
    MasonryAdapter adapter = new MasonryAdapter(context, quotesList);
    recyclerView.setAdapter(adapter);
}

RecyclerView视图持有者表单QuotesFragment()将不会显示在父活动的开始。它们仅在我滚动到最后一个选项卡(在这种情况下为ExercisesFragment())时显示并返回到第一个选项卡。检查层次结构查看器似乎在应用程序启动时初始化了RecyclerView(容器在屏幕上占用了必要的空间),但它的子项不是。

奇怪的是,当我更改我添加标签的顺序时(注意我的问题标签现在位于中间):

private void addTabs(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new ExercisesFragment(), "Exercises");
    adapter.addFragment(new QuotesFragment(), "Quotes");
    adapter.addFragment(new BookFragment(), "Books");
    viewPager.setAdapter(adapter);
}

它永远不会加载!我尝试了各种各样的事情,甚至有一个question关于完全相同的问题,但它对我的情况没有帮助。它可能与Fragment / ViewPager生命周期或隐式方法有关吗?

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

我终于开始工作了,真的很愚蠢。我正在调用我的方法,在Fragment&#39 {s} onCreate()而不是onViewCreated()中加载来自JSON的引号。当我将其移动到onViewCreated()时(在设置适配器和布局管理器之后)它开始工作。