2011-07-22 14 views
-1

私はthisのようなことをやろうとしています。Androidのバックスタックをクリアする

私はメインアプリケーションAとサブアプリケーションBとCを持っています。Bは検索可能な辞書で、Cは定義なので、多くの単語を検索すると、

私が帰るときはいつでも元のBに戻って行きたいと思いますので、私はバックスタックをしたいです。基本的にはA> Bのままです。

私は現在Intentを使って設定しているので、Cから戻るボタンを押すと、Bの新しいインスタンスに移動しますが、それは明らかに私が望むものではありません。

アイデア?

+1

[here](http://developer.android.com/guide/topics/manifest/activity-element.html#lmode)で紹介されているさまざまなlaunchModesを調べましたか? singleTop、singleTask、またはsingleInstanceモードは、探している動作を提供します。 – theisenp

+0

私はそれをもう一度。さまざまな旗を見て、彼らが助けることができるかどうかを見ます。あなたがCから戻ってきたとしても、それはあなたを元のbに連れてはいけませんか? – Rob

+0

フラグは、Cから新しいBを起動しようとするときを除いて、私が望むものとほぼ同じです。元のBに戻ります。 – Jdban101

答えて

2

Cから戻ると元のBに戻るべきではありませんか?バックボタンであること

A> 
    B> 
    C< 
    B> 
    C> 
     C< 
    C< 
    B< 
A 
>次のアクティビティに行くと

、および<:だからスタックは次のようになりますか?

すべてのアクティビティに対してonBackPressedをオーバーライドすることができます。したがって、Cでは新しいBをロードし、Bは新しいAをロードし、AはmoveTaskToBack(true);をロードしますが、これはソリューションのほうが少なく、作業。

onResumeを使用して、デフォルトでのようにBが表示されるようにしてください。関連する変数を新しいアクティビティの内容に設定します。あなたがCから来ているときにのみ必要ならば、Cがロードされたときにtrueに設定されたクラスブール値を持ち、onResumeまたはonRestartでチェックします。 trueの場合は、すべてをデフォルト/空白に設定し、ブール値をfalseに設定します。そうでない場合は、それをどのように読み込んでください(これは家に帰ってアプリに戻った場合です)。私は私の仕事の机にないんだけど、私はあなたがしたいと思う:

@Override 
    public void onResume() { 
     super.onResume(); 
     if(fromC == true){ 
     //Set all variables to load default dictionary 
     fromC = false; 
     } 
    } 
} 

これは新しいB.

またはその代わりのように、元のBの行為をしなければならない、あなたはそれを簡単に行うことができます、としたときに、このような新しいBロードする意図を呼び出す:一つだけB.あなたが戻ったときに、それは空白としてロード作ることは少し異なっており、クラスを必要とすることが作ってあげる

startActivity(getIntent()); 
finish(); 

を変数、または私が考えている他のトリッキーなトリックです。 .zip of small sample

もしあなたのコードをそのようなもの(ほとんどの場合、適切な変数を使って適切に動作させることができればそれが意味をなさない場合)を作り直すことができれば、 。

+0

は、私はちょうど試してみました。 問題はそう、私はBの新しいインスタンスに行くときから来ている: A> B> C> B> C <この場合 が、私は最後のCは元に戻りたいですB、さもなければ私達は巨大なバックチェーンで終わることができます。 編集:(この権利をフォーマットしようとすると問題が発生します) – Jdban101

+0

私はあなたが何を意味するのかを知っていますが、なぜBの新しいインスタンスが欲しいのですか? – Rob

+0

Bは基本的にメインの辞書のページです。その上にすべての単語が最初からスクロールできるようになっています。検索を行うとBが再び開き、その検索に一致するすべての単語が表示されます(たとえば、「a」とすべてのaのポップアップを検索し、スクロールすることができます)。私はすべての言葉の完全なスクロール可能なページに戻って行くことは、終了するのではなく、あなたがそのページをもう一度したい場合には再び開く必要があるのが最良です。 – Jdban101

2
@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (splash.sdk < 5 && keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
      onBackPressed(); 
     } 

     return super.onKeyDown(keyCode, event); 
    } 
    //This will make the back button exit the app to the home screen. 
    @Override 
    public void onBackPressed() { 
     moveTaskToBack(true); 
     return; 
    } 
+1

私は、同じアクティビティの複数のインスタンスがバックスタティックの同じ時間ですが、戻るを押すたびにホーム画面に戻ることはありません。 – theisenp

+0

splash.sdk、eh?私の例が再利用されるのを見てよかった! :Dこの例ではスプラッシュ画面を置くのが最も簡単なSDK版を入手する必要があります。 'int sdk = new Integer(Build.VERSION.SDK).intValue();'そして、 'sdk <5 && keycode ...'を実行してください。あなたが言ったように C < A> B> C < B> C>、そしてあなたが予測されるように、それはやってしまった: – Rob

0

これを行うにはIntentフラグを設定できます。 Activity Cで、Activityに電話したいとします。IntentFLAG_ACTIVITY_CLEAR_TOPというフラグを追加します。だから、:これは何

class C extends Activity { 

    //... 

    private void gotob() { 
     Intent go = new Intent(this, B.class); 
     go.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(go); 
    } 

    //... 

} 

はバックスタック(と上から他の明確なすべてのもの)にBのトップインスタンスに行き、存在しない場合は、新しいインスタンスを作成するかのいずれかです。私は発射旗でこれを行う方法があるなら、似たようなモードがいくつかありますが、私は同じものはないと思っています。

関連する問題