gpt4 book ai didi

android - 收到新消息时将项目移至 ListView 顶部

转载 作者:行者123 更新时间:2023-11-29 00:18:48 25 4
gpt4 key购买 nike

我正在 android 中进行基于 XMPP 的聊天。我感到震惊的是,我需要将 ListView 中项目的位置更新到顶部,以防新消息到达。

用例是..我在应用程序的联系人屏幕上,出现一条新消息..所以这个联系人应该移到列表顶部并变为粗体。这也是和whatsapp类似的地方

如何做到这一点。我的类(class) imolemebts Activity ,我已经实现了自定义列表适配器。

那么我如何找到一个项目是否存在于 ListView 中,其次如何动态改变位置

最佳答案

首先,请记住 ListView 只是 Objects 列表的表示。所以如果你想知道一个项目是否在 ListView 中,你只需要检查相应的 Object 是否在你的 Objects 列表中.

同样,当你想改变一个项目的位置时,你必须改变Object在列表中的位置。

从定义这些对象开始:

private ArrayList<MyObject> lists = new ArrayList<MyObject>();
private MyCustomAdapter myAdapter;

第一次创建 ListView 时,请照常执行:

//fill your list with your objects
lists.add(myObject1);
lists.add(myObject2);
lists.add(myObject3);
//create and set the adapter
myAdapter = new MyCustomAdapter(..., ..., lists);
myListView.setAdapter(myAdapter);

现在您可以知道您的 lists 是否包含一个特定的对象(这与检查一个项目是否在您的 ListView 中是一样的)通过简单的测试:

lists.contains(anObject);

然后,如果您想更改 ListView 中特定项目的位置,您必须创建一个新列表并将元素按正确的顺序排列。您可以使用类似的东西(未经测试但应该可以工作):

private ArrayList<MyObject> moveItemToTop(ArrayList<MyObject> lists, int positionOfItem) {
if (lists == null || positionOfItem < 0 || positionOfItem >= lists.size()) {
return lists;
}

ArrayList<MyObject> sortedList = new ArrayList<MyObject>();
//add the item to the top
sortedList.add(lists.get(positionOfItem));

for (int i=0; i<lists.size(); i++) {
if (i != positionOfItem) {
sortedList.add(lists.get(i));
}
}

return sortedList;
}

甚至this (这更容易......)。

最后,调用这两个方法来更新您的 ListView:

myAdapter = new MyCustomAdapter(..., ..., moveItemToTop(lists, itemPosition));
myListView.setAdapter(myAdapter);

关于android - 收到新消息时将项目移至 ListView 顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com