完成活动后修剪历史记录

时间:2016-04-05 06:50:40

标签: java android android-activity

我有以下活动路径:

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

Main -> B

Main上,用户可以选择在B上展示某些内容,或者使用A系列创建新内容。 完成A系列后,会转到B

当用户通过B路线到达A时,我希望后退按钮转到Main。但是当用户在A系列中时,我希望后退按钮转到上一个A(或Main中的A)。

我在创建意图时尝试使用FLAG_ACTIVITY_NO_HISTORY,但这只会让所有内容都回到Main

一旦达到阈值,有没有办法标记要删除的活动?

3 个答案:

答案 0 :(得分:2)

您可以在要关闭的所有活动中添加BroadcastReceiver(A0,A1,A2):

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();
        }
    }
}

要关闭这些活动,请从活动B中触发以下广播。

sendBroadcast(new Intent(ACTION_FINISH));

以下是github示例project

答案 1 :(得分: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();
    }
    }

答案 2 :(得分:0)

您可以在onBackPressed B中使用SINGLE_TOP和CLEAR_TOP标志触发主要活动的新意图。因此无论您如何在B处着陆,按下后退都会将您带到Main并清除所有历史记录。无需搞乱A系列活动。