2016-04-05 3 views
1

У меня есть следующий путь деятельности:Чернослив история обратно после завершения деятельности

Main -> A0 -> A1 -> A2 -> B 

или

Main -> B 

На Main, пользователь может выбрать либо показать что-то на B, или создать что-то новое с серией A. После завершения серии A он отправляется в B.

Когда пользователь добирается до B по маршруту A, я хочу, чтобы кнопка «Назад» перешла на Main. Но когда пользователь находится в серии A, я хочу, чтобы обратная кнопка перешла к предыдущему A (или Main с первого A).

Я попытался использовать FLAG_ACTIVITY_NO_HISTORY, когда создаю намерения, но это просто заставляет все вернуться к Main.

Есть ли способ отметить действия по удалению, как только я нажму порог?

ответ

2

Вы можете добавить во всех мероприятиях, которые вы хотите, чтобы закрыть (А0, А1, А2) BroadcastReceiver:

public class MyActivity extends Activity { 
    private FinishReceiver finishReceiver; 
    private static final String ACTION_FINISH = 
      "com.mypackage.MyActivity.ACTION_FINISH"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     finishReceiver= new FinishReceiver(); 
     registerReceiver(finishReceiver, new IntentFilter(ACTION_FINISH)); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 

     unregisterReceiver(finishReceiver); 
    } 

    private final class FinishReceiver extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(ACTION_FINISH)) 
       finish(); 
     } 
    } 
} 

Чтобы закрыть эти действия вызывают следующую передачу от деятельности В.

sendBroadcast(new Intent(ACTION_FINISH)); 

Вот пример github project для того же.

0

Определить логику в этом очень

образом

В серии А активность определяют логику, именно так

public static Activity A=null; 
    //in onCreate(); 

    A=this; 

    //Same way in B 
    public static Activity B=null; 

    B=this 

Теперь везде, где вы хотите, чтобы условие назад для проверки переопределять значение OnbackPressed.

@Override 
public void onBackPressed() 
    { 
    if(Activity_A.A!=null) 
    { 
    finish(); 
    return; 
    } 

    if(Activity_B.B!=null){ 
    //your condition 
    finish(); 
    } 
    } 
0

Вы можете запустить новое намерение для основной деятельности с помощью флажков SINGLE_TOP и CLEAR_TOP в onBackPressed из B. Так что независимо от того, как вы приземлились на B, нажатие на кнопку возврата приведет вас к Main с удалением всей истории. Не нужно возиться с действиями серии.

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