2013-03-17 1 views
2

У меня возникли некоторые трудности с добавлением новых элементов в ListView, чтобы появиться в верхней части ListView. Однако, когда новые элементы добавляются к ListView, я хочу, чтобы текущий элемент оставался видимым, а новые элементы добавлялись над ним.Добавить новые элементы в верхней части ListView не работает. Добавляет элементы внизу, а не

Для этого я следовал за решением отсюда: https://stackoverflow.com/a/3035521/450534, и когда это тоже не сработало, я немного начал экспериментировать.

Также стоит упомянуть, что я использую библиотеку Pull to Refresh от Криса Банеса.

Теперь с любопытством, когда я добавляю paged данные ниже последнего пункта в ListView, все работает хорошо. Но я в тупике, почему новые предметы не будут размещены над текущим пунктом и сохранить текущую позицию. Это то, что я сделал до сих пор (в onPostExecute()):

// GET THE CURRENT LISTVIEW POSITION (USED TO MAINTAIN SCROLL POSITION) 
int currentPosition = actualListView.getFirstVisiblePosition(); 
Log.e("POSITION", String.valueOf(currentPosition)); 

View v = actualListView.getChildAt(0); 

int top = (v == null) ? 0 : v.getTop(); 
Log.e("TOP", String.valueOf(top)); 

/***** APPEND NEW DATA TO THE ADAPTER AND THE LISTVIEW  *****/ 
// CAST THE ADAPTER (AGAIN) 
adapter = new NewsFeedAdapter(getActivity(), arrFeeds); 

// SET THE ADAPTER TO THE LISTVIEW 
actualListView.setAdapter(adapter); 

// SET THE SCROLL POSITION 
actualListView.setSelectionFromTop(currentPosition, top); 

lv.onRefreshComplete(); 

Это начало ListView и это то, что должно еще можно увидеть после добавления новых элементов в верхней части (выше этого). Я планирую показать небольшой макет, который показывает, сколько новых фидов находится сверху. Что-то вроде приложения Facebook теперь.

Start Of the ListView

Но новые элементы добавляются в нижней части ListView вместо сверху выше существующих элементов.

New items are added to the bottom of the ListView

Есть ли что-то очевидно, что я пропустил? Если вам нужно, чтобы я добавил код, скажите мне, и я добавлю его немедленно.

ответ

3

Другой альтернативой было бы добавить элемент в 0 poisiton массива ArrayList, который вы используете для заполнения адаптера.

your_array_list.add(int index, Object element) //Inserts the specified element at the specified position in this list. 

и после добавления вы можете вызвать notifyDataSetChanged() в своем спискеAdapter.

Пожалуйста, проверьте, не работает ли оно.

+0

Благодарим за быстрый ответ. Я тоже пробовал этот метод. Проблема (я подозреваю) заключается в том, что я извлекаю все данные в 'for loop' в' doInBackground() '. Этот код предназначен для получения Newsfeeds из API Facebook. Если бы количество предметов должно было быть указано, константа 1, то я думаю, что ваше предложение может работать. По-моему, это так. – SSL

+0

Даже если вы попытаетесь извлечь данные в doInBackground из Asynctask, вы бы установили адаптер в список, и этот адаптер будет содержать некоторый список пользовательских объектов? –

+0

Если вы имеете в виду POJO, то да. У меня есть тот, который используется для 'ArrayList'. Класс называется 'NewsfeedData'. Вы хотите, чтобы я добавил часть 'doInBackground()' также? – SSL

Смежные вопросы