Подтвердить что ты не робот

Добавить новые элементы в начало списка на Android?

Android имеет режим расшифровки, чтобы позволить автоматически прокручивать представление списка снизу, когда новые данные добавляются к адаптеру.

Может ли это быть каким-то образом отменено, так что новые элементы автоматически добавляются в верхней части списка ( "режим обратной транскрипции" )

Метод stackFromBottom кажется правильным, но не выполняет автоматическую прокрутку при изменении ввода.

Есть ли у кого-нибудь пример кода, в котором список постоянно добавляет материал, который всегда вставлен вверху? Я на правильном пути здесь?

Обновление

Спасибо за ответы, что заставило меня думать больше. На самом деле. Я хочу, чтобы новые записи отображались вверху, но на экране по-прежнему отображается элемент, на который смотрит пользователь. Пользователь должен активно прокручивать вверх, чтобы просмотреть новые элементы. Поэтому я предполагаю, что режим транскрипции - это не то, что я хочу.

4b9b3361

Ответ 1

Хм, хорошо, если я собираюсь попробовать это, я бы сделал что-то вроде следующего:

List items = new ArrayList();

//some fictitious objectList where we're populating data
for(Object obj : objectList) {
    items.add(0, obj);
    listAdapter.notifyDataSetChanged();
}

listView.post(new Runnable() {
    @Override
    public void run() {
        listView.smoothScrollToPosition(0);
    }
}

Я не знаю наверняка, что это сработает, но это кажется логичным. В принципе, просто добавьте элемент в начало списка (позиция 0), обновите адаптер списка и прокрутите до положения (0, 0).

Ответ 2

вместо этого:

items.add(edittext.getText().toString());
adapter.notifyDataSetChanged();

вы должны попробовать (работает для меня):

listview.post(new Runnable() {
            @Override
            public void run() {
                items.add(0, edittext.getText().toString());
                adapter.notifyDataSetChanged();
                listview.smoothScrollToPosition(0);
            }
            });

Ответ 3

Не должно ли быть достаточно просто добавить smoothScrollToPosition(0), когда материал будет добавлен в ListView? Не думайте, что есть опция автоматического прокрутки.

Ответ 4

Я провел несколько часов, пытаясь выполнить одно и то же. По сути, это действует как чат-приложение, в котором пользователь просматривает старые сообщения в верхней части списка.

Проблема заключается в том, что вы хотите динамически добавлять еще 50 или 100 записи вверх, но прокрутка должна быть непрерывной, откуда добавлены добавленные элементы.

В тот момент, когда вы выполняете notifyDataSetChanged, ListView автоматически позиционирует себя в первом элементе в вашем наборе данных и НЕ в позиции, которая предшествовала позиции, в которую были вставлены новые элементы.

Это делает его похожим на то, что ваш список просто перескочил на 50 или 100 записей. Я считаю, что TranscriptMode, установленный в нормальное состояние, не является решением. Список должен функционировать как обычный список, и вам нужно программно прокручивать нижнюю часть списка, чтобы имитировать TranscriptMode, поскольку он функционирует под "нормальным".

Ответ 5

Попробуйте использовать

LinkedList items = new LinkedList<Object>();

//some fictitious objectList where we're populating data
for(Object obj : objectList) {
    items.addFirst(obj);
}
listAdapter.notifyDataSetChanged();

Ответ 6

Это устраняет проблему:

...
ListView lv;
ArrayAdapter<String> adapter;
ArrayList<String> aList;
...
        lv = (ListView) findViewById(R.id.mylist);

        aList = new ArrayList<String>();
        adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, aList);
        lv.setAdapter(aAdapter);
        ...
        adapter.insert ("Some Text 1", 0);
        adapter.insert ("Some Text 2", 0);
        adapter.insert ("Some Text 3", 0);
        ...

Ответ 7

вы должны попробовать это (положение списка и адаптер обновления)

list.add(0,editTextSName.getText().toString());
adapter.notifyDataSetChanged();