

以下の質問で回答が得られないのでこちらでも質問させてください。

> <https://stackoverflow.com/questions/27767657/android-up-navigation-
> targetting>

## 前提条件：画面

  * ActivityA(Aa) : Activity
  * ActivityB(Ab) : ViewPagerをもつActivity 
  * ActivityC(Ac) : URI schemeをもつActivity (myapp://foo)
  * ActivityD(Ad) : Activity
  * FragmentA(Fa) : ViewPager item 1
  * FragmentB(Fb) : ViewPager item 2
  * FragmentC(Fc) : ViewPager item 3

## 前提条件：画面遷移

[code]

    Aa → Ab(Fa)  → Ac   : パターン1
          ↓↑
         Ab(Fb)  → Ad
          ↓↑
         Ab(Fc)  → Ac   : パターン1
    Notification → Ac   : パターン2 
    外部アプリ    → Ac   : パターン2
    
[/code]

## 質問：AcからUp-Navigationで遷移する画面について

### パターン1の場合

遷移先を判別するための一般的な方法はあるのでしょうか？  
現在の実装では以下のように遷移元を判別する値を渡しています。  
しかし、Up-Navigationの対象画面が確定できない場合全てにおいてこのようなコードを書くのは冗長に感じます。

[code]

    /* ActivityC.java */
    public static void launch(Context context, String from) {
        Intent intent = new Intent(context, ActivityC.class);
        // from : ViewPagerの各アイテムごとにユニークな値
        intent.putExtra(EXTRA_FROM, from);
        context.startActivity(intent);
    }
    
[/code]

### パターン2の場合

Up-Navigationの遷移先の判別方法は以下のようにしているのですが、本来はどのように  
実装されるべきなのでしょうか？  
ViewPager内やURI Schemeから遷移する画面が多い場合には以下の様なコードが増えてしまいます。

[code]

    /* ActivityC.java */
    @Override public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
        case android.R.id.home:
          if (!getIntent().hasExtra(EXTRA_FROM)) {
            // NotificationかURI Scheme経由で遷移してきたとみなす
    
            // Ab(Fa) かAb(Fc)のどっちに遷移するか分からないからAb(Fa)へ固定で
            Intent upIntent = ActivityB.createIntent(this, null);
            TaskStackBuilder.create(this)
              .addNextIntent(ActivityA.createIntent(this))
              .addNextIntent(upIntent)
              .startActivities();
            finish();
          } else {
            // このアプリ内から遷移してきたとみなす
            String from = getIntent().getStringExtra(EXTRA_FROM);
            Intent upIntent = ActivityB.createIntent(this, from);
            NavUtils.navigateUpTo(this, upIntent);
          }
      }
      return true;
    }
    
[/code]

### 質問に至った背景

当初はAndroidManifest.xmlに書くだけだから楽だと思っていたのですが、現実ではこのような画面遷移パターンに遭遇することが多く、ベストプラクティスはないのかと思い質問しました。


CC BY-SA 3.0
2015-02-05T09:36:20.713
5990
2015-08-07T09:14:12.263
2017-05-23T12:38:56.083
-1
4739
question
android
Up-Navigationの遷移先の決定方法について


パターンごとに、Acから派生させた別アクティビティを定義(Ac1, Ac2, Ac3 extends
Ac)し、Manifest上はそれぞれ別アクティビティにしてしまえば、Manifest上はスッキリすると思います。


CC BY-SA 3.0
2015-02-08T04:51:40.647
6130
2015-02-08T04:51:40.647
7572
5990
answer