0

私は非常に単純なアプリケーションを作成し、アンドロイドを学ぼうとしています。

このアプリケーションでは、Map を含む 1 つのアクティビティを作成し、オプション メニュー項目をクリックするとオプション メニューがあり、別のアクティビティを開き、現在のマップを閉じます。コードは次のとおりです。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent intent = new Intent();

    if (item.getItemId() == R.id.LegalNotice) {
        intent.setClass(Map.this, LegalNotices.class);
    } else if (item.getItemId() == R.id.ChangeDistance) {
        intent.setClass(Map.this, ChangeDefaultDistance.class);
    }

    startActivity(intent);
    this.finish();

    return true;
}

ここで ChangeDefaultDistance は、リスト ビューのみを含むアクティビティです。リスト ビューから特定の項目を選択すると、マップ アクティビティが再び開始されます。コードは次のとおりです。

@Override
        public void onItemClick(AdapterView<?> arg0, View view,
                int position, long id) {

            TextView tv;

            tv = (TextView) view;

            Map.distance = tv.getText().toString();

            startActivity(new Intent(ChangeDefaultDistance.this, Map.class));

        }

マップが再び開始されると onCreate() メソッドが実行されますが、以前は onCreate メソッドでマップを特定の位置にズームし、マーカーを描画しましたが、現在はズームされておらず、マーカーも描画されていません。コードをデバッグすると、コードが実行されていることがわかりましたが、何も起こっていません。

なぜこれが起こっているのか誰か教えてもらえますか?

これも onCreate メソッドのコードです。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (isGooglePlayAvailable()) {

        criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);

        // Getting the service from context and giving to location_manager
        location_manager = (LocationManager) getSystemService(LOCATION_SERVICE);

        setContentView(R.layout.mapdemo);

        placesTask = new PlacesTask();

        getGoogleMap();

        getUserLocation();

        google_map.clear();

        Toast.makeText(Map.this, "Hello Sexy!!!", Toast.LENGTH_LONG).show();

        Toast.makeText(this, "Latitude:" + lat + " Longitude:" + lang,
                Toast.LENGTH_LONG).show();

        drawMarker();

        // If Distance is not choosed default distance is given
        if (distance.equals("")) {
            distance = "1000";
        }

        sb = createUrl();

        placesTask.execute(sb);

    }

}

すべての機能は正常に動作しています。

しかし、再びズームしてマーカーを描画するのではなく、何が問題になるのでしょうか?

4

1 に答える 1

1

ListView を開く前に適用した変更が表示されない理由はActivity、マップActivityを最初から開始していて、メソッドを再度スローonCreateして、基本的にすべてのビューを再度作成しているためActivityです。

簡単に言えば、これを同じインスタンスをもう 1 つ作成しているかのように見てAcitivtyください。これで、アクティビティ スタックに同じタイプの 2 つのアクティビティができます。

あなたがすべきことは、startActivityメソッドでリストアクティビティを開始する代わりに、新しいものを最初からやり直すのではなく、それを開始して、リストからすでに作成されたマップにstartActivityForResult結果を返すことです。AcitivtyActivityActivity

この質問を見て、メソッドの使用方法を理解してstartActivityForResultください。

Android で「startActivityForResult」を管理するには?

そしてドキュメントで:

http://developer.android.com/training/basics/intents/result.html

于 2013-10-08T13:29:32.277 に答える