使用适配器中的不同数据更新不同 ListView 中的常见帖子

Posted

技术标签:

【中文标题】使用适配器中的不同数据更新不同 ListView 中的常见帖子【英文标题】:Update common post in different ListView with different data in adapter 【发布时间】:2015-02-07 01:54:37 【问题描述】:

假设一个应用首先使用自定义适配器列出ListView in Fragment ( 1st ) 中的所有帖子。并且自定义适配器数据是ArrayList<Hashmap<String,String>>

然后用户可以转到另一个片段,例如类别片段(2nd),我们有另一个具有不同数据的列表视图。 我们为片段使用返回堆栈,用户可以通过单击返回按钮返回到上一个片段。

问题:

在这些片段中,一些帖子可能很常见!就像附加的图片一样,在第一张图片中,我们可以在所有帖子列表中看到一个帖子,当点击类别并转到类别片段时,我们可以再次看到该帖子。

然后,如果用户点击此帖子并转到单个帖子活动(3rd),用户可以看到“赞”按钮并可以赞此帖子(4th)。 p>

到现在为止一切正常! 但是当用户单击后退按钮时会发生麻烦!第一个用户转到类别片段( 5th ),我们应该在列表视图上显示点赞按钮作为点赞按钮。 如果用户进一步返回所有帖子,我们也应该喜欢该列表视图中的按钮! (第六

处理此问题的最佳策略是什么? :)

【问题讨论】:

【参考方案1】:

您可以创建绑定到列表视图的数据模型并使用该数据填充列表视图。

要后期执行类似制作按钮之类的操作,您可以使用广播接收器(本地)或使用tinyBus 或 otto 对任何类型的事件进行回调。

获取回调后,只需通知片段中的特定列表。

技巧在于模型形成和回调之间。

【讨论】:

你能给我看一个代码sn-p,它可以用像otto这样的EventBus来做到这一点!我没有任何使用事件总线的经验:((我是新手),请帮助!【参考方案2】:

您可以使用transaction.addToBackStack(null) 显式强制返回按钮状态添加到返回堆栈。然后,您可以覆盖后退按钮(在onBackPressed() 内)并插入您需要的任何行为。我不确定我是否遵循上述所有内容,但我认为这个组合将解决您解决的基本问题。

【讨论】:

谢谢,但我们必须返回堆栈:) 知道了,但请记住,您可以覆盖后退按钮(在onBackPressed() 内)并插入您需要的任何行为。我已经在答案中说得更清楚了。 你知道吗,问题是如何访问适配器中的帖子位置,正如我所说,我们可以在不同的列表视图中使用不同的数据发布帖子,这个特定的帖子在我们的列表中可以有不同的位置查看数据。【参考方案3】:

第一个(单个帖子活动)问题可以通过将like 添加到数据的类别列表集(ArrayList.get(i).addLike 或您用来添加喜欢的任何东西)然后调用来轻松解决

adapter.notifyDatasetChanged();

这将使您的第二个列表使用新内容(您刚刚更改的内容)自行更新

所以现在问题是第一个列表。 据我了解,我们有 2 个包含相同项目的列表,(至少我想相信,因为它是 post 类型的元素)有它自己的唯一 ID,也许尝试循环通过第一个列表搜索该元素?

例如,如果第二个列表(类别?)现在显示单个帖子活动中的帖子,并且其 ID 为 5。 更改喜欢的数量时,请尝试以下操作:

//First we change the second list item which is the first one on the backstack & we know it's position on the list
CategoryList.get(currentPost).addLike();

//Then we loop the first list to find the same post from the second list on it
for(int i = 0; i < MainList.size(); i++)

    if(MainList.get(i).getID == CategoryList.get(currentPost).getID)
    
        //Add the like on the first list
        MainList.get(i).addLike();
        break;
    


//Call update on the adapters
MainListAdapter.notifyDatasetChanged();
SecondListAdapter.notifyDatasetChanged();

【讨论】:

你知道吗!它可以超过2个步骤!用户之前看到的所有片段都存储在后堆栈中!如果用户想退出应该支持所有这些!根据你的策略,我认为我们会遇到一些问题。无论如何都非常感谢你:) 有多少片段并不重要,只要您有 2 个包含 2 组数据的列表,您就必须更新它们并通知适配器它将工作。无论如何,如果它不能解决您的问题,我很乐意继续提供帮助,请致电大声笑 好,我试试你的方法,我把结果告诉你。你知道我问他们这个问题的大多数人都说什么,我应该使用EventBus来处理它。

以上是关于使用适配器中的不同数据更新不同 ListView 中的常见帖子的主要内容,如果未能解决你的问题,请参考以下文章

Android: ListView的使用(列表控件)

每行具有不同布局的Android ListView

适配器模式 在Android中的简单理解

从片段更新ListView适配器内的TextView

android中的listview计数与适配器计数

Android:从 viewPager 中的 Fragment 为 ListView 的适配器调用 getview()