Отображать новые элементы в верхней части списка

Я использую список для заполнения 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)

то он всегда будет отображать новый элемент вверху.