0

フェッチ結果のセットをリストとして表示しようとしています。ダミーデータを使用しようとすると、正しく表示されますが、サーバーから取得したデータに変更しても何も起こりません。エラーが発生しないので、非常に混乱します

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;

import android.app.ListFragment;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

public class BlogFragment extends ListFragment {

    String[] countries = new String[] {
        "India",
        "Pakistan",
        "Sri Lanka",
        "China",
        "Bangladesh",
        "Nepal",
        "Afghanistan",
        "North Korea",
        "South Korea",
        "Japan"
    };

    String [] titles ={};
    ArrayAdapter<String> adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        /** Creating an array adapter to store the list of countries **/
        new AsyncFetchData().execute();
        adapter = new ArrayAdapter<String>(inflater.getContext(), android.R.layout.simple_list_item_1,titles);

        return super.onCreateView(inflater, container, savedInstanceState);
    }

    private class AsyncFetchData extends AsyncTask
    {

        @Override
        protected Object doInBackground(Object... arg0) {


            JSONArray a = new JSONArray();
            ArrayList<String> aList = new ArrayList<String>();
            a = ServerAPI.getData();
            for (int i = 0; i < a.length(); i++) {
                String title = null;
                String content = null;
                try {
                    title = a.getJSONObject(i).getString("title");
                    content = a.getJSONObject(i).getString("content");
                    aList.add(title);
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(title);
//              System.out.println(content);
            }
            titles = aList.toArray(new String[aList.size()]);
            /** Setting the list adapter for the ListFragment */


            return null;
        }

        protected void onPostExecute(Object result) {
        // TODO Auto-generated method stub
        ArrayAdapter aa = new ArrayAdapter(getActivity().getBaseContext(), android.R.layout.simple_list_item_1, titles);
        aa.notifyDataSetChanged();  
        setListAdapter(aa); 
    }
    }
}

文字列配列countriesrunOnUiThreadメソッドで正しく表示されますが、タイトルは正しく表示されません。titles 文字列配列に配置されたデータを確認しましたが、有効です。なぜこれが起こっているのですか?

4

3 に答える 3

0

問題は:

アダプターは、古いデータ セットで既に初期化されています。したがって、基になるデータを更新していますが、アダプターはまだ古いデータを保持しています。

新しいデータでアダプターを更新する必要があります。

そのために、

電話

adapter.notifyDatasetChanged(); 

直前

setListAdapter(adapter);

notifyDataSetChanged: 接続されたオブザーバーに、基になるデータが変更されたこと、およびデータ セットを反映するすべてのビューがそれ自体を更新する必要があることを通知します。

于 2014-11-16T11:16:32.640 に答える