[英]onBackPressed from Fragment Displays Activity Twice
我有一個Application min SDK 21,目標25。使用: android.app.DialogFragment
和android.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_TASK
和FLAG_ACTIVITY_NEW_TASK
和FLAG_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.