2012-03-20 10 views
0

ユーザーがリストの一番下までスクロールすると、項目をアダプタに追加しようとしています。私はこれを行うことができますが、私はアダプタに新しい項目を追加し、すでにそこにあった項目を保持したいが、元の項目が削除され、新しい項目だけが表示されるようになります。どのように私はこれを達成することができるどんなアイデア?android notifyDataSetChanged()は、リスト内の元のデータを削除します。

これは私のコードは、ATMのように見えるものです:ちょうど私がやってclearifyする

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つのリストに新しい項目を追加し、最後にアダプタに通知します。

新しい項目がすべて正しく追加されるため、新しい項目が追加される前の項目が何らかの理由で削除されたか、もう表示されなくなってしまうという問題があります。

は、それが元のデータと、新たに追加された

任意のアイデアの両方を含んでいないという意味、私はリストの長さが増加しないことを確認したことを追加するために忘れましたか?

[EDIT]私は自分の質問に答えるリストビュー

 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); 
+0

これは、アダプタがgetCountから返す値を更新していない場合に表示される可能性があります。それは可能でしょうか? –

+0

@PhillipFitzsimmons getCountから得られる値は "titles"というリストの長さなので、問題はないと思います。 – Line

+0

アダプターをリストビューに設定したときのポストコードとカスタムアダプターのシグニチャー... –

答えて

0

にアダプタを設定する場所のコードを追加します。

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

以前の方法ではアダプタの内部リストに新しいデータと古いデータが含まれていましたが、アダプタのtotalItemCountは更新されませんでした。

関連する問題