2017-07-19 2 views
3

Activity Aに投稿とそのコメントを表示するアプリがあるとします。コメントの1つをクリックすると、Activity Bに移動します。したがって、Activity Bはコメントを表示し、そのコメントについても返信します。今まで私は問題はありません。 Activity BActivity Aの親Activitymanifest.xmlに設定するだけです。親に行く方法エクストラデータで始める必要があるアクティビティはありますか?

今、また私はActivity Xを持っています。これは、ユーザープロフィールとそれらの投稿とコメントのすべてを表示します。コメントをクリックすると、Activity Bに移動します。しかし、ボタンをクリックすると、Activity Xに戻ります。それをActivity Aに戻すにはどうすればいいですか?

ところで、Activity Aを開始するには、その投稿のIDを含む余分なデータを提供する必要があります。また、コメントごとに投稿IDのIDも持っています。

Activity Bで次のことができますか?

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      // if come from Activity A: 
       NavUtils.navigateUpFromSameTask(this); 
      // else 
       Intent intent = new Intent(this, ActivityA.class); 
       intent.putLong("ID", comment.getPostId()); 
       startActivity(intent); 
      return true; 
     default: 
    } 

    return super.onOptionsItemSelected(item); 
} 

または私はActivity XからActivity Bを開始するTaskStackBuilderのようなものを使用する必要がありますか?

答えて

1

これを実行する方法はさまざまです。私のお気に入りは、別のアプローチは、getCallingActivityを使用することです、あなたのセットアップ

Intent intent = new Intent(); 
    String caller = getIntent().getStringExtra(CALLER_ACTIVITY); 
    if (caller.equals(ActivityA.class.getName())) { 
     NavUtils.navigateUpFromSameTask(this); 
     return; // dont need to do anything 
    } else if (caller.equals(ActivityX.class.getName())) { 
     intent.setClass(this, ActivityA.class); 
    } 
    intent.putExtras(getIntent().getExtras()); // if more info needed 
    startActivity(intent); 
    finish(); 

で、このようなIntent何かに必要な情報を渡すことですが、あなたの場合これだけの作品がstartActivityForResult()での活動を開始しました。
あなたが使用している場合は、AppCompatあなたはそれがテントの方法を使用することをお勧めします理由です、上記のオプションで変更される可能性がありますAppCompat.getReferrer()

行動を使用して、発信者を得ることができます。呼び出し元が設定されていない場合

あなたは.equalsがActivityA.class.getName() `に秩序を呼び出す変更することを検討可能性がある。この

Intent intent = new Intent(this, ActivityB.class); 
intent.putExtra(ActivityB.CALLER_ACTIVITY, this.getClass().getName()); 
startActivity(intent); 
+1

ようActivityBを開始します。等号(呼び出し側)'可能性のNPEを避けるために、 。 (あるいは、開発者のエラーを隠す可能性があるため) –

関連する問題