5

私は Android Native App に取り組んでいます。私がやろうとしていたのは次のとおりです。

Activities - A -> B -> C  Then  A-> B -> C -> C  . 

C アクティビティから、再び C を指している場合は、C、B をスタックから手動で削除したいと考えています。私の背中では、 A にのみ移動する必要があります。

私はfinish()を試しましたが、問題は次のとおりです:

Activities - A -> B ->  C  Then  A-> B -> C -> C  on finish A -> B -> C  required state A-> C .

スタック内のすべてのアクティビティをキャッチし、スタックから特定のアクティビティを削除する方法を知っている人はいますか??

4

6 に答える 6

6

アクティビティ C で、オーバーライドonBackPressedして次のように追加します。

@Override
public void onBackPressed() {
    if (shouldGoBackToA) {  // There are various ways this could be set
        Intent intent = new Intent(this, AActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    } else {
        finish();
    }
}

FLAG_ACTIVITY_CLEAR_TOP新しいものを開始するのではなく、スタックを A アクティビティの既存のコピーに移動させます。 ドキュメントから

public static final int FLAG_ACTIVITY_CLEAR_TOP
設定されていて、起動されているアクティビティが現在のタスクで既に実行されている場合、そのアクティビティの新しいインスタンスを起動する代わりに、その上にある他のすべてのアクティビティが閉じられ、このインテントが配信されます新しいインテントとして(現在一番上にある)古いアクティビティに。

于 2013-11-06T07:37:18.067 に答える
0

アクティビティ C で、戻るボタンが押されると、次のようにアクティビティ A が開始されます。

@Override
public void onBackPressed() {
  Intent intent = new Intent(getApplicationContext(), A.class);
  intent.putExtra("EXIT", true);
  startActivity(intent);
}

次に、アクティビティ A の onCreate() でこれを行います

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();  
}
于 2013-11-14T23:13:27.713 に答える
0

インテントの呼び出し中に、次のように activity clear top というフラグを渡します。

Intent newIntent=new Intent(this,MainActivity.class);
        newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(newIntent);
于 2013-11-06T07:21:09.573 に答える
0

これを使用できます: A アクティビティでは、B アクティビティに渡します。このようにフラグ FLAG_ACTIVITY_NO_HISTORY を使用してインテントを追加する必要があります。

Button b=(Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent newIntent=new Intent(AActivity.this,Bactivty.class);
                newIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivity(newIntent);
            }
        });

CActivity に移動中:

Button b = (Button) findViewById(R.id.button1);
        b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent newIntent = new Intent(Bactivty.this, CActivity.class);
                startActivity(newIntent);
            }
        });

バックプレスで AActivity に移動します。

于 2013-11-06T07:52:10.120 に答える
0

ステップ 1:結果 A -> B -> C1 -> C2 のアクティビティを開始します。startActivityForResult でアクティビティを呼び出します。

Intent intent = new Intent(yourActivity.this, nextActivity.class);
startActivityForResult(intent, 1);

ステップ 2: C2 で、A に戻りたいことを指定します。アクティビティが完了したら、次のコードを記述します。

Intent i = getIntent();
i.putString("Result","GottoA");
setResult(Activity.RESULT_OK, i);
finish();

ステップ 3: C2 が終了するたびに、previsus スタック アクティビティのonActivityResultが呼び出されます..そのため、C1 と B onActivityResult で結果を設定したかどうかを確認できます..それに応じて終了し、アクティビティ B と c に次のコードを実装します。

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     Intent i = getIntent();    
     if (resultCode == RESULT_OK && i.getString("Result","null").equals"GottoA") { 
        i.putString("Result","GottoA");
        setResult(RESULT_OK, i);
        finish();
       }
    }
于 2013-11-06T07:32:36.640 に答える