我正在使用列表来填充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顶部的新项)。