0

adapter.notifyDataSetChange()関数からlistActifityを更新するためにを呼び出すと、onResume()後でそのアクティビティの他の関数からは機能していないように見えるという問題があります。

ユーザーが(別の画面で)戻るボタンをクリックしてリストのあるウィンドウに戻ったときに、リスト(ビュー)を更新したい。私が気づいたことのnotifyDataSetChange()1つは、配列リストからオブジェクトの1つを変更したときに(他の関数から)機能することですが、オブジェクトを追加または削除したいときは機能しませんArrayList。これは私にとってこれまでのところうまくいっていますが、毎回リストを再クエリする必要はありません。

@Override  
        protected void onResume() {  
        lightWeightDAO.open(); //db connection  
        adapter.clear();  
        buckets = lightWeightDAO.getExerciseBucketsByWorkoutId(workout.getId());   
        adapter.addAll(buckets);  
        adapter.notifyDataSetChanged();  
        super.onResume();      
    }

onResume()からnotifyDataSetChange()を削除すると、すべてが機能しているように見えます(arraylistを変更した後に単純なnotifyDataSetChange()を呼び出すだけです)。

これが機能しない理由はありますか?

4

1 に答える 1

1

使用することによって:

buckets = lightWeightDAO.getExerciseBucketsByWorkoutId(workout.getId());   
adapter.addAll(buckets);  

この新しいコンテンツをアダプタに追加しただけで、アダプタをにバインドbucketsしていません。したがって、この:buckets

buckets.add(string);
adapter.notifyDataSetChanged();

アダプタ内のデータには影響しません。また、コメントで前述したように、アダプターに直接追加すると、アダプターが呼び出さnotifyDataSetChanged()れます。したがって、上記の2行を使用するすべての場所を次のように置き換えるだけです。

adapter.add(string);
于 2012-11-19T06:42:08.627 に答える