簡體   English   中英

從BackBacked中的另一個活動中完成活動

[英]Finish activity from Another activity onBackPressed

我有一個Activity假設Activity_A調用了Activity_B ,而沒有顯示任何內容,則使用startActivityforResult()轉到了Activity_C

這些按預期工作,用戶看不到Activity_b並且如果Activity_c返回正確的return_code, Activity_B根據代碼運行,但是如果用戶按下“后退”按鈕,它將進入一個空的Activity_B (因為信息是從Activity_C返回的),然后轉到我想要的是Activity_A ,如果按下“后退”按鈕,它將轉到Activity_A否則將按現在的方式工作。 我用IntentActivity_A使用標志FLAG_ACTIVITY_REORDER_TO_FRONT但隨后它只是移動Activity_B在活動列表中的下一個位置。

Activity_A之前有多個Activity_A ,因此使用Flag清除頂部將無濟於事。

我試着做一個Activity變量,它將調用finish()onBackPressed()但它只會返回錯誤的空指針

Activity_C上的代碼

@Override
public void onBackPressed(){
    Intent intent = new Intent(getApplicationContext(),GalleryPreview.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    bg_edit1 abc = new bg_edit1();
    startActivityIfNeeded(intent,0);
    abc.t1.finish();
//  Intent i = new Intent("finish_activity");
//  sendBroadcast(i);
    finish();

}

Activity_B上的代碼

使用廣播接收器(我認為我的廣播接收器實現錯誤或不起作用)

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals("finish_activity")) {
                finish();
            }
        }
    };


registerReceiver(broadcastReceiver, new IntentFilter("finish_activity"));
unregisterReceiver(broadcastReceiver);

我在嘗試Activity / AppCompatActivity方法時遇到的錯誤

void androidx.appcompat.app.AppCompatActivity.finish()' on a null object reference 

您無需完成其他Activity 那是錯誤的方法。 要在按下后退按鈕時從C直接返回A ,請在C執行以下操作:

@Override
public void onBackPressed(){
    Intent intent = new Intent(this,GalleryPreview.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
                    Intent.FLAG_ACTIVITY_SINGLE_TOP);
    startActivity(intent);
}

通過添加CLEAR_TOP標志,將自動從堆棧中刪除活動B 通過添加SINGLE_TOP標志,確保將使用A的現有實例,而不是A的新實例。

您也不需要活動BBroadcastReceiver

暫無
暫無

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

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