0

私は3つのアクティビティ(フォーム1、2、3)を持っており、ユーザーがフォーム3に記入して送信した後、アクティビティから情報を削除したい(1&2&3)が、アクティビティ3で送信した後

(つまり、ユーザーが送信後にクリックして戻ると、フォーム1、2、3で自分の情報を見つけたくない

.Intent intent = new Intent(getApplicationContext(), Home.class);
 intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent);

これにより、アクティビティ 3 の後にクリックして戻ったときに、ユーザー データのない 1 & 2 & 3 アクティビティが可能になりますか? 手伝ってくれませんか?===================編集===============

誰かが私にこれを言いましたが、私はそれを理解できません。

pass a reference to the previous forms in the last one and call clear on any element

皆さん、ありがとうございました

4

5 に答える 5

1

次のように、Activity クラスの onActivityResult メソッドを使用できます。

アクティビティ 1 で、次のコードを使用してアクティビティ 2 を開始します。

Intent intent = new Intent(this, Activity2.class);
startActivityForResult(intent, 0);

アクティビティ 1 では、次のように onActivityResult メソッドをオーバーライドします。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0 && resultCode == 20) {
        // Activity 2 is finish, so finish activity 1
        finish();
    }
}

アクティビティ 2 では、次のことを行います。

Intent intent = new Intent(this, Activity3.class);
startActivityForResult(intent, 0);

そしてこれで:

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0 && resultCode == 20) {
        // Activity 3 is finish, so finish activity 2
        setResult(20);
        finish();
    }
}

アクティビティ 3 で、ユーザーがフォームを送信するときに、以下のコードを使用します。

Intent intent = new Intent(this, Home.class);
startActivity(intent);
setResult(20);
finish();

PS : getApplicationContext() ではなく、「this」または「Activity1.this」を使用することをお勧めします。

乾杯、セバスチャン

于 2012-05-07T08:40:27.347 に答える
1

問題を解決するには、以下のコードを試してください。

     Intent homeScreen = new Intent(getApplicationContext(), Home.class);
     homeScreen.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(homeScreen);

ありがとう...!

于 2012-05-07T08:10:29.797 に答える
1

これを試してみてください..

最後の送信アクティビティで、別のアクティビティまたは既存のアクティビティを開始する場合は、これを追加します

終了(); インテント インテント = 新しいインテント (getApplicationContext(), 新しい NewActivityOrExistingActivityName.class); インテント.addFlags(インテント.FLAG_ACTIVITY_CLEAR_TOP); startActivity(意図);

これにより、以前のアクティビティ スタックのすべてのアクティビティがクリアされます

于 2012-05-07T08:43:13.100 に答える
1
There are two different ways to do that.
  1. アクティビティ終了後に結果を設定できます。これはチェーンのように機能します。たとえば、1->2->3 アクティビティ 3 に終了ボタンがあり、結果をアクティビティ 1 に送信するとします。その後、終了ボタン クリック イベントでアクティビティ 3 から setResult() を呼び出し、finish() を呼び出してアクティビティを終了できます。アクティビティ 2 では、onActivityResult() でデータを受け取ることができます。アクティビティ 2 からアクティビティ 1 でも同様に、結果コードを確認してデータを保存し、結果を送信できます。

    setResult(); onActivityResult();

  2. 2 番目の方法では、最初にアクティビティ 1 のマニフェスト ファイルにシングル トップを設定する必要があります。これは、3 からすべてのデータを保存するときに最終的に戻ります。

            android:launchMode="singleTop"
    
          from your activity 3 send broadcast to activity 1.
          to finish all your activity which you have opened after 1 you can use your code.
    
    
     Intent intent = new Intent(getApplicationContext(), Home.class);
     intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(intent);
    

// これは、最初のフォーム アクティビティを開始する直前に書く必要があります。あなたの場合は、アクティビティ 1 を開始する直前だと思います。

BroadcastReceiver form_filled = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String received_action = intent.getAction();

        if (received_action.equals("form_filled")) {
            Bundle bundle = intent.getExtras();
            // GET ALL DATA FROM BUNDLE.
        }
    }
};
registerReceiver(form_filled, new IntentFilter("form_filled"));

// これは、アクティビティ 3 を終了する前に行う必要があります

   Intent temp_intent = new Intent();
    temp_intent.setAction("form_filled");
    sendBroadcast(temp_intent);

 Intent intent = new Intent(getApplicationContext(), activity2.class);
 class_obj_class_name class_obj = new class_obj_class_name(); // FILL YOUR DATA IN CLASS OBJ
 intent.putExtra("class_obj", class_obj); //class_obj IS YOUR CLASS OBJECT IN WHICH YOUR INFORMATION SAVED.
 startActivity(intent);

 // IN ACTIVITY 2 ONCREATE
 class_obj = (class_obj_class_name)intent.getSerializableExtra("class_obj");
 // SAME YOU CAN USE TO PASS DATA IN activity3

それがうまくいくことを願っています..フォーマットして申し訳ありません... :)

于 2012-05-07T08:55:38.887 に答える
0
.Intent intent = new Intent(getApplicationContext(), Home.class);
 intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(intent)

完了:)ありがとうございました。

于 2012-05-08T07:09:48.217 に答える