我正在使用列表来填充ListView()。用户可以将项目添加到列表中。但是,我需要将项目显示在ListView的顶部。如何在列表的开头插入一个项目,以便以相反的顺序显示它?
答案 0 :(得分:20)
默认情况下,list会在底部添加元素。这就是为什么你添加的所有新元素都将显示在底部。如果你想以相反的顺序,可能在设置listadapter / view之前反向列表
类似的东西:
Collections.reverse(yourList);
答案 1 :(得分:15)
另一个没有修改原始列表的解决方案,覆盖适配器
中的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;
}
}
答案 2 :(得分:10)
您应该使用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);
答案 3 :(得分:3)
ListView显示存储在数据源中的数据。
在数据库中添加时,必须在最后添加元素。因此,当您通过Cursor对象获取所有数据并将其分配给ArrayAdapter时,它只是按此顺序。你应该基本上尝试将数据放在数据库的开头,而不是最后,通过设置一些时间戳。
使用ArrayList,您可以通过 Collections.reverse(arrayList)
执行此操作,或者如果您使用的是SQLite,则可以使用 order by
。
答案 4 :(得分:2)
您可以在列表的开头添加元素:例如
public static void main(String args[]) {
int j = 0;
while (j++ <= 3) {
// Create Scanner object to take input from command prompt
Scanner s = new Scanner(System.in);
// Take input from the user and store it in st
String st = "";
st = s.nextLine();
if (st.equalsIgnoreCase("END")) {
j = 5;
}
// Initialize the variable count to 0
int count = 0;
// Convert String st to char array
char[] c = st.toCharArray();
// Loop till end of string
for (int i = 0; i < st.length(); i++) // If character at index 'i' is not a space, then increment count
{
if (c[i] != ' ') {
count++;
}
}
// Print no.of spaces
System.out.printf("[%4d] spaces in ", +(st.length() - count));
// Print no.of spaces
System.out.println('"' + st + '"');
j++;
}
}
然后它将始终在顶部显示新元素。
答案 5 :(得分:1)
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
答案 6 :(得分:0)
您可以随时在对象中添加日期戳,并根据该列表视图对列表视图进行排序。
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());
这应该对您的列表进行排序,以使最新的项目位于顶部
答案 7 :(得分:0)
您总是可以使用LinkedList,然后使用addFirst()方法将元素添加到列表中,它将具有所需的行为(ListView顶部的新项目)。