1

アプリを構築する過程で、アクティビティをAと呼び、 A(1) -> A(2) -> A(3) -> ... -> A(として複数回開きます。 m) -> ... -> A(n) .

アプリでA(m)までずっとポップしたいのですが、選択したアクティビティまでずっとポップする方法はありますか?

FLAG_ACTIVITY_CLEAR_TOPを持ついくつかの回答を既に見ましたが、スタック全体をクリアしてスタックの最初の要素に移動するだけのように思えますが、それは私が取得しようとしているものではありません。

アップデート:

ここで達成しようとしているのは次のとおりです。質問のリストがあり、ユーザーはそれぞれに対して異なる回答を選択できます。

彼が選択すると、質問と回答が履歴のリストに入り、別の質問が表示されます。任意の時点で、ユーザーは履歴ボタンをクリックして、選択した質問に戻ることができます。

Q&A アクティビティはすべて同じなので、質問に戻るということは、そこに到達するまでスタックをポップすることを意味します。

4

3 に答える 3

2

私があなたを正しく理解していれば、同じアクティビティが N 個あり、スタック内の任意の開始点アクティビティに戻りたいと言っているのですか?

「スティッキー」アクティビティの前にあるすべてのアクティビティを終了する必要があることを事前に知っているのか、それとも途中で決定されるのかは完全にはわかりません

アクティビティが重複している場合に N 個のアクティビティをスタックからポップする恣意的な方法は知りませんが、(未完成のコード) などの独自のロールを作成できます

A(M) が次のアクティビティを起動する前にスティッキーになることが事前にわかっている場合は、フラグを渡して新しいタスクを起動したら、それ自体を強制終了する必要があることを各フォワード アクティビティに伝えることができます。チェーンの最後のアクティビティが終了すると、A(M) に戻ります

in A(...) 
startSelf()
{

   Intent I = new Intent(this,MyActivity.class);
   if (bFinishSelf || bFinishForward) 
     I.putExtra("finishself", 1);

   if (Finishelf)  
     finish();


   startActivity(I); 

in ... all A(...) onCreate( ... 

Bundle b = getIntent().getExtras(); 
if(b !=null && extras.getInt("finishself");
  bFinishSelf = true; 

次に、新しいアクティビティを開始するときに、finishself フラグが設定されているかどうかを確認し、設定されている場合は、新しいアクティビティを開始した後に finish() を呼び出します...

一方、 A(z) が A(...) に戻る必要があると判断するものである場合、 A(z) では、呼び出し元の親に、到達するまで自分自身を殺す必要があることを伝えることができると思いますデータに含まれる何らかの ID ...

A(M) startActivityForResult(...)

A(Z) どういうわけか、A(M) をスティッキー アクティビティにする必要があると判断します ...

finshAndStopAt(int ID) {
  Intent I = new Intent(); 
  I.putExtra("finish",ID); 

  if (getParent() == null) {
    setResult(Activity.RESULT_OK, I); 
  } else {
    getParent().setResult(Activity.RESULT_OK, I); 
  }
  finish();

}

すべての A(z ... m) (親の) は戻りデータを監視します

@Override void onActivityResult(int requestCode, int resultCode, Intent data) {

    // If we are asked to finish ourselves, pass it on ...    
    if (null != data && data.getInt("finish",stopAt) != myID) {
       if (getParent() == null) {
          setResult(Activity.RESULT_OK, data); 
       } else {
          getParent().setResult(Activity.RESULT_OK, data); 
       finish();
    }
    // else we can hang around and are the sticky activity
}

ちょっと面倒だし、誰かがもっと簡単な方法を知っているかもしれません

于 2012-05-10T06:42:53.620 に答える
0

フラグメントの使用を検討しましたか? このようにして、FragmentManager クラスのインスタンスを使用して、FragmentTransaction クラスのメソッドを通じて生成したフラグメント履歴を処理できます。また、トランザクションにタグを付けてから、指定された名前のトランザクションまですべてのバック スタック状態をポップすることもできます。
アクティビティでこれを行う同様の方法があるかどうかはわかりません。
こちらをご覧ください:
http://developer.android.com/reference/android/support/v4/app/FragmentManager.html
http://developer.android.com/reference/android/support/v4/app/FragmentTransaction. html
サポート ライブラリを使用する場合は、SDK をターゲットにすることを心配する必要はありません。

于 2012-08-18T06:24:24.587 に答える
0

一般的な応答として、ポップによって返されたアクティビティが必要なものになるまでポップし続け、必要に応じてプッシュバックすることをお勧めします。

于 2012-05-10T05:20:27.410 に答える