簡體   English   中英

來自片段的onBackPressed顯示活動兩次

[英]onBackPressed from Fragment Displays Activity Twice

我有一個Application min SDK 21,目標25。使用: android.app.DialogFragmentandroid.support.v7.app.AppCompatActivity.

初始Activity是啟動器,它可以啟動3個活動中的1個和1個DialogFragment DialogFragment可以反過來啟動一個Activity (這是3個Activity之一)。 我所DialogFragment的問題僅與正在加載的DialogFragment有關,而該Fragment然后加載了Application,然后返回到Launcher。

Fragment立即返回到啟動器(不加載Activity )時,此工作正常。 我可以檢測到Fragment是通過啟動器加載的, onBackPress()可以正常處理它。

但是,當Fragment加載另一個Activity ,然后使用onBackPress()返回到Fragment ,然后使用onBackPress()返回到Launcher時,我遇到了問題。 當前處理這種情況的方式是, Fragment使用標志FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOP通過Intent加載啟動器(這似乎是解決某人相似問題的方法)。 我嘗試了這些標志的其他變體,並且也沒有這些標志。 我也試圖用這種局面onBackPress()DialogFragment無需加載Activity使用意圖,以及應用程序終止,而我需要它返回到啟動。

在這種情況下,使用這些標志,當我返回啟動器時,啟動器將顯示,然后清除然后重新顯示(在另一個onBackPress() ,應用程序然后正確終止)。 問題是啟動器顯示兩次。 我假設首先顯示的啟動器是加載的原始副本,然后由新副本替換。 在這種情況下,我還沒有找到一種方法來加載啟動器的原始副本(如果實際上正在發生這種情況)。 如前所述,這是一個DialogFragment

如何解決此問題,以便在這種情況下啟動器活動不會顯示兩次?

為什么不只完成片段中的活動以返回啟動器活動?

如果您確實必須使用意圖,請嘗試Intent。FLAG_ACTIVITY_REORDER_TO_FRONT

嘗試如下重寫onBackPressed()方法:

@Override
public void onBackPressed() {
    int count = fragmentManager.getBackStackEntryCount();

    if (count == 1) {
        finish();
    } else {
        fragmentManager.popBackStack();
    }
}
if (getSupportFragmentManager().getBackStackEntryCount() > 0) {
   getSupportFragmentManager().popBackStackImmediate();
} 
else {
  super.onBackPressed();
}

onBackPressed()方法中使用它。

暫無
暫無

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

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