私はこれで約1日、頭を壁にぶつけています。誰かが助けてくれることを願っています。
私のプログラムは、いくつかの Json をロードして解析し、非同期タスクのオブジェクトの配列に入れます。この非同期タスクは ListFragment クラスから呼び出され、データは onPostExecute で送り返されます。エラーは発生せず、リストのロード アニメーションは正常に表示されなくなります。しかし、私が何をしても、リストにデータが入力されることはありません。
私は間違いなくデータを返し、正しく解析しています.onPostExecuteで単純な配列とアダプターを使用して、それが私のアダプタークラスではなく、まだ機能しないことを確認しました.
以下のコードを単なる例に簡略化しました。以下のコードは、1 秒間待機してから、ロード アニメーションを削除します。しかし、リストには入力しません。doInBackground メソッドからスリープを削除すると、完全に機能します。
public class MyFragment extends ListFragment {
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
AsyncTask<Void, Void, String> task = new AsyncTask<Void,Void,String>()
{
@Override
protected String doInBackground(Void... params) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, android.R.id.text1, values);
setListAdapter(adapter);
}
};
task.execute();
}
}
私が言うように、json の読み込みをシミュレートするために使用している Thread.sleep(1000) を削除すると、正常に動作します。
違いがある場合は、2.3 のフラグメント サポート ライブラリを使用しています。
ありがとうスティーブ