0

を表示するアクティビティがありますListView。を使用しAsyncTaskてサーバーからデータを取得し、それらをリストに入力します。

アクションバーをクリックすると、新しいアクティビティが開始されます( Dialog のようなスタイル) - ユーザーは「送信」をクリックしていくつかのデータを追加し、それらをサーバーに送信します。次に、このDialog-Activityが閉じ、リストを更新して新しいデータを追加したいときに前のものに戻ります。

メソッドで AsyncTask を実行しようとしましたonResume()が、以前のデータと一緒に新しいデータを取得している間に、それらをすべて 2 回取得すると、onCreate() でも AsyncTask が実行されます。

1)アクティビティが初めて通過onStart, onCreate and onResumeするときでも、リストデータが2回表示されます。アクティビティが初めて開始されたときにそのコードを実行しないように、フラグのようなものを使用する必要がありますか?

2)notifyDataSetChangedサーバーからデータを入力するので、どうすれば役立つかわかりません。を拡張するカスタム アダプタがありArrayAdapterます。

コード

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);


    JSONSpotTask task = new JSONSpotTask();     //task
    task.execute();
    try {
        task.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    list1 = (ListView) findViewById(R.id.listview1);
    ta = new TipsAdapter(this, R.layout.row_list_item, results);
    list1.setAdapter(ta);


}   



@Override
protected void onResume() {                     
    super.onResume();                               

    JSONSpotTask task = new JSONSpotTask();     //task
    task.execute();
    try {
        task.get();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (ExecutionException e) {
        e.printStackTrace();
    }

    list1 = (ListView) findViewById(R.id.listview1);
    ta = new TipsAdapter(this, R.layout.row_list_item, results);
    list1.setAdapter(ta);
}

ありがとうございました

4

2 に答える 2

2

作成ループは常に のonResumeonCreateに実行されるため、リスト データは にのみ表示する必要がありますonResume()。その後、最初の実行で 1 回だけ実行され、Activity がフォアグラウンドになるたびに実行されます。

フォアグラウンドになっても常にやり直す必要がないことがわかっている場合はonCreate、「ダイアログ」で設定されたフラグを使用しActivityます。ただし、毎回常に再表示する方が安全だと思いますonResume

于 2013-09-06T10:13:21.887 に答える
0

結果配列を更新した場合にのみ、notifdatasetchanges を使用する必要があります。それ以外の場合は、 onPostExecute コールバックで結果配列を使用して新しいアダプターを作成し、それをリストビューにバインドする必要があります

于 2013-09-06T10:16:33.357 に答える