android notifyDataSetChanged () удаляет исходные данные в списке - PullRequest
0 голосов
/ 20 марта 2012

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

Вот так выглядит мой код atm:

public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount) {

        if (loading) {      
            if (totalItemCount > previousTotal) {
                previousTotal = totalItemCount;
                loading = false;
                previousTotal = totalItemCount;
                currentPage++;
            }
        }
        if (!loading
                && ((firstVisibleItem + visibleItemCount) >= totalItemCount)) {
            if (fragmentMode == 5) {
                ActiveUser.getInstance().FetchVidPage(currentPage, chanID,
                        activity, this);
                loading = true;
            }
        }
}

@Override
public void onTaskFinished() {
    titles.addAll(ActiveUser.getInstance().getWebVidInfo(1));
    thumbs.addAll(ActiveUser.getInstance().getWebVidInfo(2));
    data.addAll(ActiveUser.getInstance().getWebVidInfo(3));
    describtions.addAll(ActiveUser.getInstance().getWebVidInfo(4));
    vidOwnerIDs.addAll(ActiveUser.getInstance().getWebVidInfo(4));

    notifyDataSetChanged();

}

Просто чтобы прояснить, что я делаю;Как только нижняя часть списка становится видимой, я запускаю AsyncTask, который загружает больше видео.В asynctask я установил адаптер в качестве прослушивателя для события, которое запускается после завершения asynctask - это работает.

onTaskFinished () последний метод выше - здесь я добавляю новые элементы в 4 списка, которые адаптериспользуется для заполнения каждого элемента списка, и, наконец, я уведомляю адаптер.

Таким образом, все новые элементы добавляются в порядке, проблема в том, что элементы, которые были в до добавления новых, предназначены длякакая-то причина удалена или больше не видна.

Забыл добавить, что я убедился, что длина списков действительно увеличивается, то есть она содержит как исходные данные, так и добавленные

Любыеидеи?

[РЕДАКТИРОВАТЬ] Добавление кода, где я установил адаптер для просмотра списка

        adapter = new LazyAdapter(getActivity(), ActiveUser.getInstance()
                .getWebVidInfo(3),
                ActiveUser.getInstance().getWebVidInfo(1), ActiveUser.getInstance()
                        .getWebVidInfo(2),
                ActiveUser.getInstance().getWebVidInfo(5), ActiveUser.getInstance()
                        .getWebVidInfo(4), CHAN_ID, FRAGMENT_MODE);
        listing.setAdapter(adapter);
        listing.setOnScrollListener(adapter);

1 Ответ

1 голос
/ 21 марта 2012

Отвечая на мой вопрос.

Оказывается, проблема была в том, что я не понимал, что делает notifyDataSetChanged (). Он вызывает воссозданный адаптер с теми же параметрами конструктора, что и при его первоначальном создании. Поэтому добавление новых элементов во внутренние списки адаптеров никак не повлияло. Вместо этого мне нужно было убедиться, что списки, которые были проанализированы для адаптера через его конструктор, содержали все элементы.

Таким образом, хотя мой метод и раньше заставлял внутренние списки адаптера содержать новые и старые данные, totalItemCount адаптера не обновлялся.

...