こんにちは私は画面Bから操作を実行しています。操作後、1つのアラートダイアログが表示されます。ユーザーがそのダイアログの[OK]ボタンをクリックすると、画面Aに移動します。これはインテントを介して行われます。
画面Aにはリストが含まれています。リストは、リストアクティビティとアレイアダプタを介して入力されます。
画面Aを開く前または後に非同期タスクを呼び出してリストを更新する必要があります。
どうやってするの?
こんにちは私は画面Bから操作を実行しています。操作後、1つのアラートダイアログが表示されます。ユーザーがそのダイアログの[OK]ボタンをクリックすると、画面Aに移動します。これはインテントを介して行われます。
画面Aにはリストが含まれています。リストは、リストアクティビティとアレイアダプタを介して入力されます。
画面Aを開く前または後に非同期タスクを呼び出してリストを更新する必要があります。
どうやってするの?
これを行う最善の方法は、 onResume() または onCreate() メソッドで AsyncTask をインスタンス化することです。次に、AsyncTask クラスの doInBackground メソッドで、listView に必要なデータを配列にロードできます。最後に、onPostExecute() で、配列にあるデータを使用してアダプターをインスタンス化し、それを listView に割り当てる必要があります。このようなもの:
ProgressDialog pd;
ArrayAdapter<String> adapter;
ArrayList<String> dataStrings;
@Override
public void onResume() {
dataStrings = new ArrayList<String>();
pd = new ProgressDialog(context);
new MyAsyncTask().execute(params);
}
public class MyAsyncTask extends AsyncTask<String, Boolean, ArrayList<String>> {
@Override
protected void onPreExecute( )
{
pd = new ProgressDialog(context);
pd.setTitle(EsCache.instance.getLangItem("LABEL_PLEASE_WAIT"));
pd.setMessage(EsCache.instance.getLangItem("LABEL_LOADING_DATA"));
pd.setCancelable(true);
pd.show();
}
@Override
protected ArrayList<String> doInBackground(String... params) {
// TODO Auto-generated method stub
dataStrings = SomeMethodGetData(); // returns data and stores it in list
return dataStrings;
}
@Override
protected void onPostExecute(ArrayList<String> list) {
adapter = new ArrayAdapter<String>(context,
android.R.layout.simple_list_item_1, dataStrings);
listView.setAdapter(adapter);
pd.dismiss();
}
}
これは最も単純なデモンストレーションにすぎませんが、カスタム アダプターを使用しても大きな違いはありません。ただし、何かを混同したり、doInBackground() から UI に関係するものを変更しようとしたりしないように注意する必要があります :) これがお役に立てば幸いです。