web-dev-qa-db-ja.com

notifydatasetchanged()呼び出しでリストビューが更新されない

これは私のコードです

listview =(ListView) findViewById(R.id.lv1);


    ArrayList<SClass> Monday = new ArrayList<SClass>();

    SClass s1=new SClass();
    s1.sName="samp";
    s1.salary=1000;
    Monday.add(s1);
    temp=Monday;
    adapter = new CustomAdap(this, temp);
    listview.setAdapter(adapter);

上記のコードは正常に動作しますが、コードをこれに変更すると

    listview =(ListView) findViewById(R.id.lv1);


    adapter = new CustomAdap(this, temp);

    SClass s1=new SClass();
    s1.sName="samp";
    s1.salary=1000;
    Monday.add(s1);
    temp=Monday;

    listview.setAdapter(adapter);
    adapter.notifyDataSetChanged();

リストビューには何も表示されません。何が問題ですか?

15
tr_quest

アダプターを初期化したコレクションを変更しているようです。私はこのようにあなたのコードを変更します:

// initial setup
listview =(ListView) findViewById(R.id.lv1);
ArrayList<SClass> Monday = new ArrayList<SClass>();
adapter = new CustomAdap(this, Monday);
listview.setAdapter(adapter);

// change your model Monday here, since it is what the adapter is observing
SClass s1=new SubjectClass();
s1.sName="samp";
s1.salary=1000;
Monday.add(s1);

// notify the list that the underlying model has changed
adapter.notifyDataSetChanged();

CustomAdapがArrayAdapterのサブクラスである場合は、次のようにすることもできます。

// change your array adapter here
SClass s1=new SubjectClass();
s1.sName="samp";
s1.salary=1000;
adapter.add(s1);

// notify the list that the underlying model has changed
adapter.notifyDataSetChanged();

編集:あなたのコメントのおかげであなたが今何をしたいのか私はもっと理解します。おそらく、アダプターにその内容を別のArrayListで置き換えるようにしたいと思うでしょう。 CustomAdapをArrayAdapterのサブクラスにします。

その後、次のように使用できます。

// replace the array adapters contents with the ArrayList corresponding to the day
adapter.clear();
adapter.addAll(MONDAY);

// notify the list that the underlying model has changed
adapter.notifyDataSetChanged();
17
louielouie

なぜ最初のコードで動作するのですか?

---値をtemp Listに設定してadapterに渡し、listviewに表示するためです。

2番目のコードで動作しないのはなぜですか?

--- tempに値を設定する前にtempをアダプタに設定しているため
2番目に、新しい値をtempに設定すると、tempがクラスレベルでパブリックでないか、または静的でないため、アダプタークラスが更新された値を取得しない可能性があります.. temp宣言をルートレベルに置き、試してください。

そして、必要なだけ完全なコードを表示し、警告が出た場合はLogcatも表示してください。

5
MKJParekh

適切なxmlファイルで参照ビューへのリンクを確認してください。または、少なくとも上記のxmlファイルの存在を確認してください。

4
lastshadowrider

どのアダプターを使用していますか?一時変数にデータを設定した後、アダプターが更新されないのは明らかなケースです。

3
Shubhayu