2015-03-26 4 views
1

У меня есть несколько действий и я не могу понять, как заставить его работать с backstack.Android back stack с несколькими действиями

Есть ли способ сделать это:

MainActivity -> (намерение) subActivity -> (намерение) subsubActivity -> (назад пресса) subActivity -> * (назад пресса) MainActivity

* Это где я испытываю проблемы. Поскольку я прихожу из своей subsubActivity, даже думал, что я использовал android: noHistory = "true" в манифесте, он не возвращается к основному виду деятельности.

Спасибо за помощь!

+0

call finish() когда вы вызываете намерение от субзависимости до субсубъективности – Kay

+0

Зачем использовать вспомогательные действия, когда у вас есть фрагменты. С задним ходом было бы легко справиться. – Ryan

ответ

0

Если я получить то, что вы хотите, вы можете использовать startActivities с массивом намерений, который будет уволен один за другим activity1-> activity2-> activity3 -назад-деятельности2 -назад-acitivty1

1

Это идеальный кандидат для использования комбинации startActivityForResult и переопределения onActivityResult в вызове Activity.

Если у вас есть Activity A, который начинается Activity B (который мы не можем вернуться к), который начинается Activity C:

Activity A позвонит Activity B так, как вы сейчас находитесь. Activity B, однако, назовет startActivityForResult(Intent, int) вместо startActivity(Intent). Таким образом, когда мы вернемся из Activity C, мы можем назвать finish() на Activity B и вернуться к Activity A, например, так:

public class ActivityB extends Activity { 

    private static final int REQUEST_CODE_ACTIVITY_C = 1001; 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data){ 
     if(requestCode == REQUEST_CODE_ACTIVITY_C) finish(); // If coming back from Activity C, finish() 
    } 

    private void openActivityC(){ 
     Intent intent = new Intent(this, ActivityC.class); 
     startActivityForResult(intent, REQUEST_CODE_ACTIVITY_C); 
    } 

} 

Теперь, когда вы звоните openActivityC(), вы гарантируя, что onActivityResult() будет вызываться при возвращении из Activity C, что позволяет вам закончить Activity и вернуться к Activity A.

Вы можете обеспечить еще более конкретные действия (например, настройка/проверка кода результата (например, если он отменен (Activity.RESULT_CANCELED) или успешно (Activity.RESULT_OK)) для состояний, чтобы лучше определить, что, что вызов Activity должен делать.

Надеюсь, это поможет немного объяснить это.

Редактировать: Также, если нет никаких шансов, что вы когда-нибудь захотите вернуться к Activity B, тогда решение @Kay только что вызывается finish() после запуска Намерение для деятельности C было бы самым простым подходом.

Смежные вопросы