簡體   English   中英

活動堆棧問題

[英]Activities Stack Issue

我有兩套活動假設每個活動3個活動,(A1,B1,C1 || A2,B2,C2)我從A1開始我的應用程序然后 - > B1 - > C1這里我要從C1跳轉到 - > A2在A2,如果我按回它應該存在應用程序而不是讓我回到C1,然后從A2我導航到 - > B2 - > C2。

所以基本上我想改變起始活動,就像我在一個應用程序中有兩個應用程序,當我轉到第二個應用程序時,我必須清除活動堆棧。 那可能嗎? 有任何想法嗎?

在我看來,你已經回答了自己的問題。 你寫了:

所以基本上我想改變起始活動,就像我在一個應用程序中有兩個應用程序,當我轉到第二個應用程序時,我必須清除活動堆棧。

我會這樣做:

創建DispatcherActivity ,它是在啟動應用程序時啟動的活動。 此活動是您的任務的根活動,負責啟動A1或A2,取決於...而不是自己調用finish() (即:它將被A1或A2覆蓋,但仍然位於活動的根部堆)。

A1 ,捕獲“后退”鍵並告訴DispatcherActivity退出如下:

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, DispatcherActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addExtra("exit", "true");
    startActivity(intent);
}

這將清除任務堆棧到根活動( DispatcherActivity ),然后再次使用此意圖啟動DispatcherActivity

C1 ,要啟動A2 ,請執行以下操作:

Intent intent = new Intent(this, DispatcherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addExtra("A2", "true");
startActivity(intent);

這將清除任務堆棧到根活動( DispatcherActivity ),然后再次使用此意圖啟動DispatcherActivity

DispatcherActivity ,在onCreate()您需要根據intent中的extras確定要執行的操作,如下所示:

Intent intent = getIntent();
if (intent.hasExtra("exit")) {
    // User wants to exit
    finish();
} else if (intent.hasExtra("A2")) {
    // User wants to launch A2
    Intent a2Intent = new Intent(this, A2.class);
    startActivity(a2Intent);
} else {
    // Default behaviour is to launch A1
    Intent a1Intent = new Intent(this, A1.class);
    startActivity(a1Intent);
}

A2 ,捕獲“后退”鍵並告訴DispatcherActivity使用與A1相同的onBackPressed()覆蓋來退出。

注意:我只是輸入了這段代碼,所以我沒有編譯它,它可能不完美。 你的旅費可能會改變 ;-)

如果要在按后退按鈕而不是返回上一個活動時關閉應用程序,則應覆蓋后退按鈕。 在overwrite方法中,在關閉活動后調用finish()方法。 我希望這可以幫助你。

編輯:

檢查以下鏈接:這是用於關閉視圖堆棧中的所有活動。 關閉應用程序之前關閉所有活動。

http://www.coderzheaven.com/2011/08/27/how-to-close-all-activities-in-your-view-stack-in-android/

您可以檢查在活動A2中按下的按鈕的時間,然后檢查其后退按鈕是否可以關閉應用程序。 您可以在A2中使用以下方法

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            this.finish();
        }
        return super.onKeyDown(keyCode, event);
    }

嘗試使用此意圖啟動活動A2 - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

使用onBackPressed處理此方法並完成方法。

在啟動其他活動之前,最好使用finish()方法關閉當前活動。

如果要在后退時轉到上一個活動,請覆蓋onBackPressed方法並調用特定意圖。

在A2活動中,在onBackPressed方法中添加finish方法(不要在此處調用以前的活動)。 這是其中一種方式。

將Intent從Activity C1傳遞給A2時使用as

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

並在您的活動A2中覆蓋后退按鈕

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        A2.this.finish();
    }
    return super.onKeyDown(keyCode, event);
}

FLAG_ACTIVITY_CLEAR_TOP不是您要找的。 我想你正在尋找:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM