リストの選択に基づいて別のListActivity
を起動するがあります。Activity
この秒Activity
はインターネットからかなりの量のデータをロードする必要があるため、ユーザーがアイテムをクリックしてからActivity
表示されるまでに顕著な遅延があります。
現在、クリックが処理されていることをユーザーに示す方法がないため、これは問題です(選択したリスト項目の色を変更するだけで十分ですが、それを行うための適切な方法が見つかりません)。ProgressDialog
理想的には、2番目のActivity
読み込み中に不確定を表示できるようになります。
私はこれに対していくつかの異なるアプローチを試しましたが、何も期待どおりに機能しないようです。
私は次のことを試しました:
AsyncTask
最初のでシリアル化可能なデータ(すべてではなく一部)を取得し、Activity
それを追加として2番目に渡します。ProgressDialog
で作成しonPreExecute()
たものがすぐに表示されなかったため、これは実際にはうまく機能しませんでした(doInBackground()
何らかの理由で処理が行われたために遅延したようです)。
そのためのコードは次のとおりです。
AsyncTask<String, Void, String> read = new AsyncTask<String, Void, String>() {
Dialog progress;
@Override
protected void onPreExecute() {
progress = ProgressDialog.show(SearchActivity.this,
"Loading data", "Please wait...");
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
DatasetReader reader = new DatasetReader();
reader.setFundID(params[0]);
reader.addDatsets(FundProfile.datasets);
reader.populate();
return reader.toString();
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
progress.dismiss();
}
};
read.execute(selectedItem.getUniqueID());
try {
action = new Intent(SearchActivity.this, FundProfile.class);
action.putExtra("data", read.get());
} catch(Exception ex) {
ex.printStackTrace();
}
2番目のアクティビティの
onCreate()
メソッド(これはまったく機能しません):requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setProgressBarVisibility(true);
onCreate()
2番目のアプローチの方法は次のとおりです。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setTitleColor(Color.WHITE);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setProgressBarVisibility(true);
try {
setContentView(R.layout.fund_profile);
// init some data
setProgressBarVisibility(false);
} catch(Exception ex) {
FundProfile.this.finish();
}
}