ViewPager TabLayout 问题:选项卡片段内容仅在滑动到最后一个选项卡后出现
ViewPager TabLayout issue: tab fragment content only appears after last tab has been swiped to
我有一个 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()
不会出现在父 Activity 的开始处。它们仅在我滚动到最后一个选项卡(在本例中为 ExercisesFragment()
)并返回到第一个选项卡时才会显示。检查 Hierarchy Viewer 似乎在应用程序启动时 RecyclerView 已初始化(容器在屏幕上需要 space),但它的子项不是。
奇怪的是,当我像这样更改添加选项卡的顺序时(请注意我有问题的选项卡现在位于中间):
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 生命周期或隐式方法有关吗?
感谢任何帮助。
我终于让它工作了,它真的很简单。我正在调用我的方法,该方法从 JSON 加载 Fragment 的 onCreate()
中的引号而不是 onViewCreated()
。当我将它移动到 onViewCreated()
时(在设置适配器和布局管理器之后)它开始工作了。
我有一个 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()
不会出现在父 Activity 的开始处。它们仅在我滚动到最后一个选项卡(在本例中为 ExercisesFragment()
)并返回到第一个选项卡时才会显示。检查 Hierarchy Viewer 似乎在应用程序启动时 RecyclerView 已初始化(容器在屏幕上需要 space),但它的子项不是。
奇怪的是,当我像这样更改添加选项卡的顺序时(请注意我有问题的选项卡现在位于中间):
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 生命周期或隐式方法有关吗?
感谢任何帮助。
我终于让它工作了,它真的很简单。我正在调用我的方法,该方法从 JSON 加载 Fragment 的 onCreate()
中的引号而不是 onViewCreated()
。当我将它移动到 onViewCreated()
时(在设置适配器和布局管理器之后)它开始工作了。