0

バックグラウンド作業の多くを行っているandroid.app.Application ( HireApplication )を拡張する静的クラスがあります。ここで AsyncTasks を作成し、アプリケーションが使用する最大のデータ オブジェクトを保存します。電話とタブレットの別々のアクティビティ間で再利用できるように、このコードを Application クラスに記述しています。

これは私のアプリをレイアウトする正しい方法のように思えますが、今は問題があります。AsyncTask が終了し、フラグメント ( ListFragment ) 内の ArrayAdapter で notifyDataSetChanged を実行する必要があります。

これが私の解決策です:

リストフラグメント:

public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
    myListAdapter = new MyListAdapter(getActivity(), HireApplication.myList);
    HireApplication.myListAdapter = myListAdapter; // Tell the application where the ListView is so that it can notifyDataSetChanged
}

採用申込書:

public static ArrayAdapter<BikeStation> stationListAdapter = null;

private static void asyncTaskCompleteCallback() {
    {...}
    myListAdapter.notifyDataSetChanged();
}

さて、これは機能します...しかし、それは正しくありません。少し密結合しているように聞こえる UI 要素への参照をアプリケーションに返していますが、これを行うためのより良い方法がわかりません。

ArrayAdapter または Fragment に新しいデータで UI を更新するために何らかのアクションを実行する必要があることをアプリケーションに通知するより良い方法はありますか?

乾杯。

4

1 に答える 1

0

全体が間違っているように見えます...フラグメントとアダプターを使用している場合は、AsyncTasksの代わりにLoadManagerを使用する必要があります。また、すべてをアプリケーションに配置することは、解決したい問題に対する不十分な解決策のように見えます。メモリリークが発生する可能性があり、正しく感じられません。

于 2012-11-08T00:47:25.623 に答える