0

ユーザーがリストの一番下までスクロールするときに、アダプターにアイテムを追加しようとしています。これは可能ですが、新しいアイテムをアダプターに追加して、すでに存在していたアイテムを保持したいのですが、現在は元のアイテムが削除され、新しいアイテムのみが表示されます。これをどのように達成できるかについてのアイデアはありますか?

これは私のコードが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);
4

1 に答える 1

1

私自身の質問に答えます。

問題は、notifyDataSetChanged()が何をするのかを理解していないことでした。最初に作成されたときと同じコンストラクターパラメーターを使用して、再作成されるアダプターを呼び出します。そのため、アダプターの内部リストに新しいアイテムを追加しても、何の効果もありませんでした。代わりに、コンストラクターを介してアダプターに解析されたリストにすべての項目が含まれていることを確認する必要がありました。

そのため、以前の私のメソッドでは、アダプターの内部リストに新旧のデータが含まれていましたが、アダプターのtotalItemCountは更新されませんでした。

于 2012-03-21T09:13:32.403 に答える