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 片段问题的主要内容,如果未能解决你的问题,请参考以下文章

在tablayout中替换片段

活动中 TabLayout 内的片段的约束问题

getPageTitle() 没有被片段内的 Tablayout 调用

为啥片段没有显示在tablayout中

在 TabLayout 中的片段之间滑动变慢

如何使用 tabLayout 在 ViewPager 中显示片段?