在ListView的顶部显示新项目



我正在使用列表来填充ListView()。用户可以将项目添加到列表中。但是,我需要将这些项目显示在ListView的顶部。如何在列表的开头插入一个项目,以便按相反的顺序显示它?

默认情况下,列表在底部添加元素。这就是为什么您添加的所有新元素都将显示在底部的原因。如果你想按相反的顺序,可以在设置为listadapter/view之前反向列表

类似于:

Collections.reverse(yourList);

另一个不修改原始列表的解决方案,覆盖Adapter 中的getItem()方法

@Override
public Item getItem(int position) {
    return super.getItem(getCount() - position - 1);
}

更新:示例

public class ChatAdapter extends ArrayAdapter<ChatItem> {
public ChatAdapter(Context context, List<ChatItem> chats) {
    super(context, R.layout.row_chat, chats);
}
@Override
public Item getItem(int position) {
    return super.getItem(getCount() - position - 1);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if(convertView == null) {
        convertView = inflater.inflate(R.layout.row_chat, parent, false);
    }
    ChatItem chatItem = getItem(position);
    //Other code here
    return convertView;
}

}

您可能应该使用ArrayAdapter并使用insert(T, int)方法。

例如:

ListView lv = new ListView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.id...);
lv.setAdapter(adapter);
...
adapter.insert("Hello", 0);

ListView显示存储在数据源中的数据。

当您在数据库中添加时,它最终必须添加元素。因此,当您通过Cursor对象获取所有数据并将其分配给ArrayAdapter时,它只是按照这个顺序。基本上,您应该尝试将数据放在数据库的开头,而不是最后,可能需要一些时间戳。

使用ArrayList,您可以通过Collections.reverse(arrayList)来实现,或者如果您使用的是SQLite,您可以使用order by

您可以在列表的开头添加元素:如

arraylist.add(0, object)

则它将始终在顶部显示新元素。

mBlogList是一个回收器视图。。。

mBlogList=(RecyclerView) findViewById(R.id.your xml file);
mBlogList.setHasFixedSize(true);

LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
mBlogList.setLayoutManager(mLayoutManager);//VERTICAL FORMAT

您可以在对象中始终有一个日期戳,并根据该日期戳对列表视图进行排序。。

   public class CustomComparator implements Comparator<YourObjectName> {
        public int compare(YourObjectName o1, YourObjectName o2) {
            return o1.getDate() > o2.getDate() // something like that.. google how to do a compare method on two dates
        }
    }

现在对您的列表进行排序

Collections.sort(YourList, new CustomComparator()); 

这应该对您的列表进行排序,使最新的项目位于的顶部

您可以始终使用LinkedList,然后使用addFirst()方法将元素添加到列表中,它将具有所需的行为(ListView顶部的新项)。

最新更新