假设某个应用首先使用自定义适配器列出ListView
(第一)Fragment
中的所有帖子。并且自定义适配器数据为ArrayList<Hashmap<String,String>>
然后用户可以转到另一个片段,如类别片段(第二),我们有另一个包含不同数据的列表视图。 我们使用后台堆栈作为片段,用户可以通过单击后退按钮返回到prev片段。
的问题:
在这些片段中,一些帖子可能很常见!像附加图像一样,在第一张图片中,我们可以看到所有帖子列表中的帖子,当点击类别并转到类别片段时,我们可以再次看到该帖子。
然后,如果用户点击此帖并转到单个帖子活动(第3个),则用户可以看到类似按钮,并且可以喜欢此帖子(第4个)。
到现在为止,每件事都行! 但是当用户点击后退按钮时会发生麻烦!第一个用户转到类别片段(第5个),我们应该在列表视图上显示像按钮一样的按钮。 如果用户进一步回到所有帖子,我们应该像列表视图中的按钮一样喜欢!! ( 6th )
处理此问题的最佳策略是什么? :)
答案 0 :(得分:1)
您可以创建数据绑定模型到列表视图,并使用该数据填充列表视图。
要像执行类似按钮一样执行后续操作,您可以使用广播接收器(本地),或者可以使用tinyBus或otto为任何类型的事件进行回调。
获取回调后,只需通知片段中的特定列表。
欺骗在模型形成和回调之间。
答案 1 :(得分:0)
您可以使用transaction.addToBackStack(null)
显式强制将后退按钮状态设置为而不是添加到后台堆栈中。然后,您可以覆盖后退按钮(在onBackPressed()
内)并插入您需要的任何行为。我不确定我是否遵循了上述所有内容,但我认为这个组合将解决您解决的基本问题。
答案 2 :(得分:0)
第一个(单个帖子活动)问题可以通过在类别列表数据集(ArrayList.get(i).addLike或任何你用来添加喜欢的东西)中添加like来轻松解决,然后调用
adapter.notifyDatasetChanged();
这将使您的第二个列表使用新内容(您刚刚更改)自行更新
所以现在问题是第一个列表。 据我所知,我们有2个包含相同项目的列表,(至少我想相信,因为它的帖子类型)有它自己的唯一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();