代码之家  ›  专栏  ›  技术社区  ›  Lester

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

  •  1
  • Lester  · 技术社区  · 6 年前

    我有三个活动 A、B、C

    启动屏幕/ 是登录屏幕/ C 是主标签栏屏幕

    在A,我可以推到B

    在B,我可以推到C再回到A

    在c上,我想避免它返回到a,但可以推到a(意味着注销)

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

    我怎样才能做到?

    A.活动

    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.活性

    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.活动

    //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 回复  |  直到 6 年前
        1
  •  1
  •   GianhTran    6 年前

    A.活动

    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.活性

    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.活动

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

    和重写方法 onBackPressed 关于b.活动

     @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
  •  1
  •   Hong Duan    6 年前

    注册A BroadcastReceiver 在活动A中,然后调用 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();
    }
    
        3
  •  0
  •   vijay maddhesiya    6 年前

    如果要从活动C返回到活动A,请设置为清单文件。

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