Я использую список для заполнения ListView(). Пользователь может добавлять элементы в список. Однако мне нужно, чтобы элементы отображались в верхней части списка. Как вставить элемент в начале моего списка, чтобы отобразить его в обратном порядке?
Отображать новые элементы в верхней части списка
Ответ 1
Вероятно, вы должны использовать 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);
Ответ 2
По умолчанию список добавляет элементы внизу. Вот почему все новые элементы, которые вы добавляете, будут отображаться внизу. Если вы хотите его в обратном порядке, возможно, перед установкой в listadapter/view назад список
Что-то вроде:
Collections.reverse(yourList);
Ответ 3
Другое решение без изменения исходного списка переопределяет метод 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;
}
}
Ответ 4
ListView отображает данные, поскольку они хранятся в вашем источнике данных.
Когда вы добавляете в свою базу данных, она должна добавлять элементы в конце. Таким образом, когда вы получаете все данные через объект Cursor и назначая его ArrayAdapter, он находится только в этом порядке. Вы должны в основном пытаться поместить данные в начало базы данных, а в конце концов, имея, возможно, временную печать.
Используя ArrayList, вы можете сделать это с помощью Collections.reverse(arrayList)
или если вы используете SQLite, вы можете использовать order by
.
Ответ 5
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
У вас всегда может быть дата в ваших объектах и сортировка списка на основе этого.
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
Вместо этого вы можете использовать LinkedList, а затем использовать метод addFirst() для добавления элементов в свой список, и он будет иметь желаемое поведение (новые элементы в верхней части ListView).
Ответ 8
Вы можете добавить элемент в начало списка: например
arraylist.add(0, object)
то он всегда будет отображать новый элемент вверху.