Android activity 调用同一个 activity 有附加功能和后退按钮问题

Android activity calling the same activity with Extras and back button issues

这更多是关于 Android 活动的设计问题。

总结:

  1. Provider 提供给 RecyclerView X items in categoriesList 数组列表
  2. CategoriesList 读取数组列表并显示 X 项
  3. 用户单击具有子类别的项目
  4. 提供商用 Y 项覆盖 categoriesList 数组列表
  5. CategoriesList 读取数组列表并显示 Y 项
  6. 单击后退按钮会在新的类别列表中显示 X 个项目activity
  7. 由于数组现在有 Y 项,因此会抛出错误或显示错误的项

长版:

我在 JSON 文件中有类别,每个类别在单独的 JSON 文件中有文章。在主要 activity "CategoriesList" 中初始化了一个 ArticleProvider,它从 "main_categories.json" 文件中读取类别并向用户显示列表。

根据所选类别,我使用 Extras 传递给下一个 activity ("ArticleList") 所选类别并显示文章列表。

现在我决定创建子类别。所以 CategoriesList 调用 CategoriesList 并使用附加功能我读取了一个新文件而不是 "main_categories.json" 并显示了新的子类别列表。当我输入子类别时,会显示该子类别的文章列表。

我的问题是,当我单击子类别 CategoriesList 中的后退按钮时,它会一直返回到第一个屏幕,并且 RecylerView 会显示主要类别。如果我点击它们中的任何一个,我会收到关于索引的错误,因为包含类别列表的 ArticleProvide 仍然有子类别。


我该如何解决这样的问题?无论如何要覆盖从子类别 CategoriesList 返回到调用它的主 CategoriesList 还是总的来说我的设计不好?

我很难为您提供代码,因为它太长了,正如我提到的,这更像是一个设计问题。如果需要我会这样做。

我还知道有一个变通方法可以创建一个新的 SubCategoriesList 过程,但它与 CategoriesList 基本相同,所以我希望尽可能使它工作。

如果我没理解错的话,您似乎没有正确更新适配器,或者没有发送通知状态更改。

您可以通过覆盖 onBackPressed 来捕获后退按钮操作,然后发送一个事件或手动更新适配器。通过使用 internal broadcast,您可以实现某种观察者模式,允许您的适配器订阅某些自定义事件 "back_to_categories",该事件将由您的片段在后退按钮上发出。