2017-09-22 1 views
1

どのボタンが押されたかによって、ナビゲーションスタックからいくつかの画面を削除する必要があります。Xamarin.Androidはユーザーの操作に応じて履歴から活動を削除します

私はホーム画面を持っていて、その横に3つの画面があります(ここではS1、S2、S3と呼ぶ)。

S1は家から、S1はS2を、S2はS3から開きます。

これらの3つの画面のそれぞれには、戻ると次のボタンがあります。

現在の画面がS2でバックボタンを押した場合、ナビゲーションスタックから削除したいと思います.S1に戻って戻るボタンを押すとS2に行きます。間違っています。それは家に帰るべきです。

私は、Finish()を呼び出すことができますが、私が戻ってくるのではなく次のボタンを押しても機能しないことが分かりました。この場合、NoHistory = trueは動作しません。

これを管理できるものはありますか、それを解決するための考えはありますか?

1)あなたがあなたの活動にOnBackPressedメソッドをオーバーライドすることができます。

+0

「次のボタン」を押したときに何をしましたか? –

+0

ホーム - > S1-> S2-> S3->ホームのように次の画面に進むには "次のボタン"を押します。もう一度ホーム画面に戻って「戻る」を押すとS3には進まず、これらの3つの画面はナビゲーションスタックから削除する必要があります –

+0

画面が 'S2'のときに戻るボタンを押すと' Finish ) 'スタックから削除するには、次のボタンを押すと' StartActivity(typeof(S3)) 'を使ってS3を開くことができます。 –

答えて

1

プレス戻るボタンを使用して、[次へ]ボタンを使用すると、S3を開くためにStartActivity(typeof(S3))を使用することができたときに、スタックからそれを削除するFinish()を呼び出すことができるときあなたの画面が、S2あります。

+0

@マダリンシス、私は自分の答えを更新しました。 –

0

あなたはそこに2つのソリューションを持っています。これにより、戻るボタンの古典的な動作が消去されます。たとえば、S2では、OnBackPressedをオーバーライドしてS1に明示的にナビゲートできます。しかし、この場合は、バックボタンを押したときにS2に戻るのを避けるために、この場合はS1のOnBackPressedメソッドをオーバーライドする必要があるため、注意してください。また、あなたの活動、NoHistory = trueに、設定することができます

public override void OnBackPressed() 
    { 
     //navigate to the screen you want to 
    } 

2):

は、あなたの活動にこの方法をOnBackPressed上書きすることができます。あなたの質問では、NoHistory = falseのステートメントがあなたのために働いていないと言いました。これは、あなたのヒストリスタックにアクティビティを望まない場合は、にする必要があるので完全です。

希望しました!

+0

申し訳ありませんが、私は 'NoHistory = true'を意味しました。しかし、私はどのボタンが押されるのかわからないので、これは機能しません。 –

+0

まあ、私は同じ問題に直面したことを覚えていますが、まだ問題を解決するコードがありますが、これはかなり複雑です(NavigationParameterなどで作業していました。どちらも 残念ながら今はかなり忙しいですが、可能な限りいつでもお手伝いしようとしています。 –

関連する問題