TabLayout 片段问题
Posted
技术标签:
【中文标题】TabLayout 片段问题【英文标题】:TabLayout Fragment Issue 【发布时间】:2021-06-16 12:21:06 【问题描述】:Current layout
以上是我正在开发的 android 应用中的应用布局。有一个活动,它有一个底部导航视图。使用以下方式管理导航:
this.getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();
现在,在这个片段上,我有一个 TabLayout 和一个 ViewPager,如图所示。 ViewPager 监听 TabLayout 选择器,可以通过滑动 ViewPager 或单击选项卡来更改它。工作正常..
一旦选择了一个选项卡,我将加载另一个带有 RecyclerView 的 Fragment。 RecyclerView 中的内容来自一个 URL,因此它在 Post() 上更新如下:
CompletableFuture.runAsync(this::prepare);
recyclerView.post(() ->
adapter.list = newList;
adapter.notifyDataSetChanged();
progress.setVisibility(View.INVISIBLE);
);
现在我面临的问题:
单击布局图像中的菜单 1 时,第一次一切正常。回收者视图能够调用服务并加载内容。现在,如果我将导航切换到菜单 2 或任何其他菜单并尝试返回菜单 1,则 ViewPager/TabLayout 没有任何进展。直到 TabLayout 我可以看到日志,然后什么也没有。基本上将 currentItem 设置为 TabLayout 被调用,但它没有调用下一个 Fragment 的创建,因此它不会再次加载 RecyclerView。 ViewPager 正在使用 FragmentStatePagerAdapter。
TabViewerAdapter extends FragmentStatePagerAdapter
使用 ChildFragmentAdapter 初始化适配器,如下所示:
TabViewerAdapter adapter = new TabViewerAdapter(getChildFragmentManager(), 0, tabs.getTabCount());
我知道行为“0”已被弃用,因此尝试使用“1”以及以下:
TabViewerAdapter adapter = new TabViewerAdapter(getChildFragmentManager(), 1, tabs.getTabCount());
尝试过使视图无效,通知适配器和许多其他.. 没有用。
我还注意到,当我切换应用程序(在运行时通过点击电话方形按钮转到另一个应用程序)并返回(恢复)然后它再次加载回收器视图。
这意味着,我错过了一些东西并尝试了onResume
方法。但是没用。
我是在做一些愚蠢的事情还是违背了设计模式或约定?不知道该怎么办..
请帮忙,谢谢。
【问题讨论】:
我通过执行以下操作解决了这个问题:1. 使用 SharedViewModel 来处理列表 2. 使用 ListAdapter 进行 RecyclerView 现在一切正常。 【参考方案1】:我通过以下操作解决了这个问题:
-
使用
SharedViewModel
处理列表
将ListAdapter
用于RecyclerView
现在一切都好。
【讨论】:
以上是关于TabLayout 片段问题的主要内容,如果未能解决你的问题,请参考以下文章