39

このナビゲーションツリーを使用してアプリにナビゲーションを実装する際に問題があります。

アプリのナビゲーションツリー

戻るボタンの標準的な実装は問題ありません。

[上へ]ボタンを実装しようとすると、問題が発生します。

私が期待すること:

  • ユーザーが詳細5アクティビティを表示していて、上ボタンを押すと、アプリはリスト3アクティビティに移動します
  • ユーザーが詳細7アクティビティを表示していて、上ボタンを押すと、アプリはホームアクティビティに戻ります

つまり、別の言い方をすれば、この動作をバックスタックで実行したいと思います。

アプリのバックスタックをクリア

ナビゲーションを処理するために次のコードを使用するためのAndroidドキュメント(祖先ナビゲーションの実装)のアドバイス:

Intent parentActivityIntent = new Intent(this, MyParentActivity.class);
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();

ただし、詳細アクティビティの親アクティビティはナビゲーションパスによって異なるため、実際にどちらであるかはわかりません。だから私はそれをインテントで呼ぶことはできません。

Androidバックスタックの実際の親アクティビティを知る方法はありますか?

そうでない場合、このアプリで正しいアップナビゲーションを実装する方法はありますか?

4

3 に答える 3

22

私はポールの答えについての私のコメントに固執します:

アイデアは、最後のParentアクティビティのスタックをトラバースすることです。例:

public static Stack<Class<?>> parents = new Stack<Class<?>>();

これで、すべての親アクティビティ(親と見なされるアクティビティ-たとえば、リストとホーム)で、これを次のアクティビティに追加しますonCreate

protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     parents.push(getClass()); 
     //or better yet parents.push(getIntent()); as @jpardogo pointed
     //of course change the other codes to make use of the Intent saved.

     //... rest of your code
}

アクティビティに戻りたい場合はParent、(コードに従って)以下を使用できます。

Intent parentActivityIntent = new Intent(this, parents.pop());
parentActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(parentActivityIntent);
finish();

私は正しいことを願っています(:

于 2013-02-01T22:52:55.253 に答える
2

これは難しい質問であり、私の意見では、「上ボタン」に対するAndroidのUXの決定に対処することの難しさを実際に示しています。したがって、あなたの問題に対する明確な答えはありません。

私はあなたのために2つの可能な解決策を持っています。

1.戻るボタンの動作を模倣します。

さまざまな親の1つからDetailを起動するためのインテントに追加を追加することを検討できます。android.R.id.homeこの追加機能は、が押されたときに起動する必要があるアクティビティをそれらのアクティビティに通知します。

これは事実上、単にHomeを再起動するのではなく、アプリが共通の祖先に「戻る」ことを意味します。

これを実装する別の方法は、でHomeonBackPressed()起動する代わりに単に実行することですが、関連するアニメーションは通常の「アップ」アクションとは異なることに注意してください。Intent.FLAG_ACTIVITY_CLEAR_TOP

2.中間の活動をスキップして、家に帰ります。

一部のアプリは、「上ボタン」を「ホームボタン」として扱います。常にHomeをで再起動することを検討することをお勧めしIntent.FLAG_ACTIVITY_CLEAR_TOPます。

于 2013-02-01T20:38:18.570 に答える
0

これは確かに古い投稿ですが、SharedPreferencesを研究していたので、この情報をsharedPreferencesデータ内にスタックし、2つの親をダウンさせる前に毎回その値を変更する可能性があると思います。それからそれを読むことによって、あなたはあなたの親を直接知ることができるはずです、そしてこれはそのためのクラス全体を構築する必要はありません。

于 2016-11-17T15:49:42.373 に答える