を使用してプログラムでに追加するActivity
with があります。MapFragment
Activity
FragmentTransaction
private static final String MAP_FRAGMENT_TAG = "map";
private MapFragment mapFragment = null;
...
protected void onCreate(Bundle savedInstanceState) {
...
mapFragment = (MapFragment) getFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);
if (mapFragment == null) {
mapFragment = MapFragment.newInstance();
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.fragment_wrapper, mapFragment, MAP_FRAGMENT_TAG);
fragmentTransaction.commit();
}
...
}
標準的な方法。次に、GoogleMap
からインスタンスを取得し、mapFragment
その設定を行い、リスナーを設定して、処理を行います。すべて正常に動作します。
次に、ユーザーがマップの操作を完了すると、AsyncTask
がトリガーされて が表示ProgressDialog
され、何らかの操作が実行され、別のフラグメントが に挿入され、再び が閉じられますfragment_wrapper
。ProgressDialog
private class GetFlightsTask extends AsyncTask<Double, Void, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// the activity context has been passed to the AsyncTask through its constructor
loadingFlightsSpinner = new ProgressDialog(context);
// setting the dialog up
loadingFlightsSpinner.show();
}
@Override
protected String doInBackground(Double... params) {
// some pretty long remote API call
// (loading a JSON file from http://some.website.com/...)
}
@Override
protected void onPostExecute(String flightsJSON) {
super.onPostExecute(flightsJSON);
// here I do stuff with the JSON and then I swtich the fragments like this
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
FlightsFragment fragment = new FlightsFragment();
fragmentTransaction.replace(R.id.fragment_wrapper, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
loadingFlightsSpinner.dismiss();
}
すべてがまだ正常に動作します。ユーザーが で何かFlightsFragment
を行った後、マップに戻ることを決定する場合があります。戻るボタンを押すと、マップが再びポップアップします。そして、これはマップが遅れる時です。国/都市名のロードが非常に遅く、マップの移動が大幅に遅れます...そして、理由がわかりませんMapFragment
。バックをポップすることについては何もしません。
興味深いのは、たとえばホームボタンを押してからもう一度アプリに戻ると修正されることです...
私は何を間違っていますか?
アイデアをありがとう。