2014-11-25 4 views
0

У меня есть следующие действия: A -> B -> C -> D. Если я нажимаю кнопку назад от деятельности DI хочет вернуться к A. Это код:Android Назад навигация

активности

// Launch Activity B 
Intent intent = new Intent(); 
intent.setClass(ActivityA.this, ActivityB.class); 

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

активность Б

// Launch Activity C 
Intent intent = new Intent(); 
intent.setClass(ActivityB.this, ActivityC.class); 

startActivity(intent); 

активность С

// Launch Activity D 
Intent intent = new Intent(); 
intent.setClass(ActivityC.this, ActivityD.class); 

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

startActivity(intent); 
finish(); 

В активность D жму назад, и я хочу, чтобы вернуться к деятельности А. Я не хочу, чтобы использовать отделку() каждый раз, когда я открываю деятельность, потому что, когда я нахожусь в деятельности CI хочу быть в состоянии вернуться к B, но когда я нахожусь в Activity D, я хочу перейти непосредственно к A, но, к сожалению, текущая реализация заставит приложение закрыться.

Может ли кто-нибудь мне помочь? Благодаря

+0

Простым способом является вызов активности A из действия D с флагом SINGE_TASK. –

+0

удалите флаги с цели, которая идет на B – njzk2

+0

. Вы можете добавить переопределить метод onBackPressed() и объявить намерение в нем для Activity A. – thestrongenough

ответ

1

Может быть, это будет работать: (Не забудьте переопределить onBackPressed)

Intent intent = new Intent(this,A.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

Значение флага:

Если установлено, и активность запускаются уже работает в текущей задаче , то вместо того, чтобы запускать новый экземпляр этого действия, все остальные действия поверх него будут закрыты, и это намерение будет передано в прежнюю деятельность (теперь сверху) как новый Intent.

Например, рассмотрите задачу, состоящую из действий: A, B, C, D. Если D вызывает startActivity() с намерением, который разрешает компонент активности A, то B, C и D будут завершены и A получают заданное намерение, в результате чего стек теперь составляет: A.

0

Вы можете захватить кнопку «Назад» в действии D, а затем запустить Activity A с флагом FLAG_ACTIVITY_CLEAR_TOP.

// For Android 2.0 and above 
@Override 
public void onBackPressed() { 

    Intent intent = new Intent(currentActivity.this, ActivityA.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
} 

Смотрите здесь для объяснения FLAG_ACTIVITY_CLEAR_TOP

Вы можете также Provide Up Navigation как предлагает другой пример. Однако это работает по-другому к задней прессе see here for comparison

1

если вы хотите simplfy вы можете попробовать навигацию для этого enter image description here

<application ... > 
    ... 
    <!-- The main/home activity (it has no parent activity) --> 
    <activity 
     android:name="com.example.myfirstapp.MainActivity" ...> 
     ... 
    </activity> 
    <!-- A child of the main activity --> 
    <activity 
     android:name="com.example.myfirstapp.DisplayMessageActivity" 
     android:label="@string/title_activity_display_message" 
     android:parentActivityName="com.example.myfirstapp.MainActivity" > 
     <!-- Parent activity meta-data to support 4.0 and lower --> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.example.myfirstapp.MainActivity" /> 
    </activity> 
</application> 
+0

К сожалению, мне не разрешено использовать навигацию вверх. Но спасибо за ваш ответ. – Laura

0

переназначения назад метод кнопки и добавить пользовательскую навигацию:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(this, ActivityA.class); 
    startActivity(intent); 
} 
Смежные вопросы