5

私は3つの活動A、B&Cを持っています。今、私はこのフォームA、B、Cを持っています。デフォルトのアンドロイド「標準」モードでは、活動のナビゲーションはこのように行われます.今、私がここで欲しいのは、私がBからアクティビティCに行ったときであり、アクティビティで前のアクティビティに戻ったとき、つまり、Bしかし、CからAに戻りたい.これを達成するにはどうすればよいですか? ?

,インテント フラグを介して実行したい、または可能であればアクティビティに起動モードを適用したい,しかし、これを達成するためにどの起動モードを使用すればよいか混乱していますか?-誰かが私を助けてくれますか?

前もって感謝します

4

8 に答える 8

11

新しいインテントを起動して、スタック内のアクティビティをクリアするだけです。

 Intent intent = new Intent(this, A.class);
 intent.addFlags(IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
 startActivity(intent);
于 2012-07-24T08:24:01.097 に答える
1

別のアプローチ:

を使用しFragmentsます。フラグメントはコンテナーに追加され、必要に応じて他のフラグメントに置き換えられます。置き換えられた Fragment は、スタックに追加することも、追加しないこともできます。自分で決められること。この場合、フローは次のようになります。

  • MainActivity は、フラグメント A をコンテナーに追加します。
  • ボタンが押された
  • Fragment A は Fragment B に置き換えられます。 Fragment A は
    スタックに追加されています。.addToBackStack(..)
  • フラグメント B が表示されます
  • ボタンが押された
  • フラグメント B はフラグメント C に置き換えられます。フラグメント B はスタックに追加されません。
  • フラグメント C が表示されます
  • 背中が押される
  • フラグメントAが表示されます

アップデート

Android が提供するドキュメントを読むことから始めることができます。

開始して基本を説明するための簡単な例。HoneyComb よりも古いバージョンをサポートするために、fragment の Android サポート ライブラリ v4 を使用しています。

main_activiy - XML

<LinearLayout>
   <FrameLayout id:content_container/>
<LinearLayout>

主な活動

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activiy ); 
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.content_container, new FragmentA());
        transaction.commit();
    }
}

フラグメント A (フラグメント B および C を作成できるアナログ)

public class Fragment A extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragmentA, container, false); 
        return view;
    }
}

内部にロジックを実装Fragmentし、クリックイベントなどをキャッチできます。これは、OnClickListener からフラグメントを切り替える方法です。

private class mClickListener implements OnClickListener {

        public void onClick(View v) {
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            transaction.replace(R.id.content_container, new FragmentB);
            transaction.addToBackStack(...); // Remove this when you don't want it to be stacked
            transaction.commit();
        }
    }
于 2012-07-24T09:32:40.403 に答える
1

finish()アクティビティ C を起動すると、アクティビティ B を実行できます。したがって、スタックは単に A->C になります。アクティビティ C を開始する前にメソッドを使用ActivityB.finish()します。他のメソッドは、押された戻るボタン キーをオーバーライドすることです。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //do your process here
        }
        return super.onKeyDown(keyCode, event);
    }
于 2012-07-24T08:26:18.930 に答える
1

finish()アクティビティ C を開始するときにメソッドを使用します。

Intent i = new Intent(ActivityB.this, ActivityC.class);
startActivity(i);
finish();
于 2012-07-24T08:23:12.720 に答える
0

アクティビティの onBackPressed メソッドをオーバーライドして、履歴ツリーを遡る代わりに A アクティビティを開始できます。

于 2012-07-24T08:23:11.567 に答える
0

あなたはfinish()を呼び出す必要があります。あなたがに移動するときのB活動で

于 2012-07-24T08:25:34.583 に答える