7

ListAdapterを使用して、次のようにListViewにデータを入力しています。

static final String[] PROBLEMS = new String[] {"one", "two", "three" };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);        

    setListAdapter(new ArrayAdapter<String>(this, R.layout.my_problems, PROBLEMS));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

その後、AsyncTask呼び出しを使用してそのリストのデータをさらに取得するためにサーバーにリモート呼び出しを行っています。サーバーからデータを取得すると、ListViewにデータを入力してリセットする方法がわかりません。これまでのところ、私はこのようなものを持っています:

    @Override
    protected void onPostExecute(String result) 
    {       
            // Unwrap the stuff from the JSON string                
            String problem_title = null;
            String problem_id = null;

            try
            {
                JSONArray obj = new JSONArray(result);
                JSONObject o = obj.getJSONObject(0);                    

                Log.d( "Title: " , "" + o.getString("problem_title") );       
                Log.d( "id: " , "" + o.getString("problem_id") );      

                problem_title = o.getString("problem_title");
                problem_id = o.getString("problem_id");
            }
            catch ( Exception e )
            {
            }

            // Now not sure what to do :)
            // How do I reset the list that I had set up above?
                }

結果を適切に構造化されたデータにしてリストをリセットすることはできますが、それがどのように行われるかはわかりません。誰か助けてもらえますか?:)

4

3 に答える 3

18

このように使っていますが、

    values = new ArrayList<String>();
    //put anything you want in values as start
    adapter = new ArrayAdapter<String>(this,R.layout.notification, values);
    setListAdapter(adapter);

それから

    //change values array with your new data then update the adapter
    adapter.notifyDataSetChanged();

この関数を実行すると、リストビューの内容が変更されます

于 2012-03-10T15:20:33.083 に答える
8

データ・セットを変更するだけの場合は、アダプターを再初期化する必要はありません。次のコードを試してください -

adapter.clear();
for(int i = 0;i<categoriesArray.length;i++){
    adapter.add(categoriesArray[i]);
} 

その後、必要に応じて、アダプターに変更を通知することもできますが、必要ではありません。

adapter.notifyDataSetChanged();

API レベル 11 以上をターゲットにしている場合は、アダプターで addAll() メソッドを使用できます。その方が効率的だからです。

adapter.clear();
adapter.addAll(categoriesArray);
于 2014-07-24T10:48:22.827 に答える
3
adapter.notifyDataSetChanged();

これを行うには良いオプションですが、必要に応じて機能しない場合もあります。その場合、アダプターを再度設定すると、リストビューが更新されます。ただし、これはリストビュー全体を再度生成するため、パフォーマンスが大幅に低下するため、適切なオプションではありません。そして、あなたのアプリは遅くなります。

于 2012-03-10T15:58:34.970 に答える