gpt4 book ai didi

带有两个 ArrayLists 的 Android ListView 适配器

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:14:01 25 4
gpt4 key购买 nike

在我们的聊天应用程序中,我们想使用很酷的新图书馆 SQLBrite更新数据库更改的聊天。由于我们的聊天有无限滚动,并且聊天室可以有非常大的消息列表,我们希望将提供给 Chat ListView 适配器的 ArrayList 拆分为两个列表。检查图形的想法。 enter image description here

  1. 我们想在数据库中设置一个点,在这个点之上,旧消息将被正常的 SQLite 查询查询。在该点以下,我们需要设置 SQLBrite,这将为我们带来添加到数据库的新消息。
  2. 每个部分都应填充其对应的 ArrayList。并且两个 arrayList 应该组合在一个适配器中。

我的问题是可以吗?如果是,我们如何在单个适配器中组合和处理两个动态 ArrayList?

编辑 11. 我需要在重置期间保持聊天滚动位置,并且在 ArrayLists 更新期间不闪烁。

最佳答案

1.借助泛型,您可以使用单个 ArrayList 处理两个 arraylist。

例如在适配器中:

setListData(ArrayList<T> pListData)
{
mListData=pListData;
}

在 View 中

 getView(int position, View convertView, ViewGroup parent){

T commonModel= getItem(position);
if(T instanceof ArrayListOneModel){
ArrayListOneModel model1=(ArrayListOneModel)T;
do stuf for first arraylit...
}
}
  1. 如果您使用相同的模型,您可以为两个数组列表设置一个类型(枚举)& 在放映期间,您可以检查一下。

3.否则你可以先在数组列表中添加旧数据,然后使用集合 addAll() 添加第 2 个最新消息列表。然后

  adapter.notifyDataSetChanged() 

将首先设置旧消息,然后将在您的列表中设置最新消息

更多说明:在第二种方法中,如果两个 arraylist 都有不同的模型,则在两个模型中都包含一个枚举作为 setter getter。

  public enum eType{
FIRST_LIST_TYPE,SECOND_LIST_TYPE
}

在从不同数据库的集合中获取数据时输入模型。例如

  public class model{
private enum eType;

//来自您的数据库的其他 setter getter 值/***二传手 setter/getter :*/

   public void seteType(enum eType)
{
this.eType = eType;
}
public enum geteType()
{
return eType;
}

}

在获取数据集期间输入例如

 Model model = new Model();
model.seteType(eType.FIRST_LIST_TYPE) ;
//same for 2nd db.
& simply check type inside getView() according to your requirement.

关于带有两个 ArrayLists 的 Android ListView 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29788684/

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