避免第三项活动回到第一项活动

时间:2018-06-20 03:32:55

标签: java android

我有三个活动 A,B和C。

A 是“开始”屏幕/ B 是“登录”屏幕/ C 是“主”标签栏屏幕

在A上,我可以推到B

在B上,我可以按C并回到A

在C上,我想避免将其返回到A,但是可以将其推到A(表示注销)

A <---> B ---> C ---> A

我该如何实现?

A.activity

Intent i = new Intent(StartedActivity.this, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
StartedActivity.this.startActivity(i);
//finish(); //if i put finish() B cannot go back to A

B.activity

Intent i = new Intent(LoginActivity.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
LoginActivity.this.startActivity(i);
finish();

C.activity

//This code is for logout, push to A.activity
Intent i = new Intent(MainActivity.this, StartedActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
MainActivity.this.startActivity(i);
finish();

所以现在的问题是我可以按A键。如何避免它?

3 个答案:

答案 0 :(得分:1)

在活动A中注册BroadcastReceiver,并在登录后致电finish()

BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        if ("your-action-string".equals(intent.getAction())) {
            finish();
        }
    }
};

用您的onCreate方法注册它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // ...
    LocalBroadcastManager.getInstance(this).registerReceiver(receiver,
            new IntentFilter("your-action-string")); // define your own action
}

onDestroy中取消注册:

@Override
protected void onDestroy() {
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
    super.onDestroy();
}

答案 1 :(得分:1)

A.activity

Intent i = new Intent(StartedActivity.this, LoginActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
StartedActivity.this.startActivity(i);

B.activity

Intent i = new Intent(LoginActivity.this, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
LoginActivity.this.startActivity(i);

C.activity

Intent i = new Intent(MainActivity.this, StartedActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
MainActivity.this.startActivity(i);

并在B.activity上覆盖方法onBackPressed

 @Override
    public void onBackPressed() {
        Intent i = new Intent(MainActivity.this, StartedActivity.class);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | 
        Intent.FLAG_ACTIVITY_NEW_TASK);
        MainActivity.this.startActivity(i);
        super.onBackPressed();
    }

所以现在您可以应用流A <---> B ---> C ---> A

这里的一个问题是A从B返回时将被重置

希望这会有所帮助

答案 2 :(得分:0)

如果您想从活动C返回活动A,则将其设置为清单文件。

       <activity
        android:name=".C"
        android:label="@string/appName"
        android:parentActivityName=".A"/>