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

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

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

问题:

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

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

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

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

【问题讨论】:

    标签: java android listview android-fragments android-listview


    【解决方案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来处理它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多