2017-07-19 108 views
0

我分鐘SDK 21的應用,靶25使用:android.app.DialogFragmentandroid.support.v7.app.AppCompatActivity.從片段onBackPressed顯示活動兩次

初始Activity是一個啓動器可以啓動3個活動的1和1 DialogFragmentDialogFragment可以依次啓動Activity(這是3個活動之一)。我遇到的問題只是關於正在加載的DialogFragment以及該片段,然後加載一個應用程序,然後返回到啓動器。

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

然而,當Fragment加載另一個Activity然後onBackPress()用於返回到Fragment然後onBackPress()用於返回到啓動程序,我有一個問題。目前處理這種情況的方式是Fragment通過Intent使用標記FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_CLEAR_TOP(這似乎是某人類似問題的解決方案)加載啓動器。我試過這些標誌的其他變體,也沒有這些標誌。我也嘗試在DialogFragment中使用這種情況onBackPress()而不使用Intent加載Activity,並且應用程序終止,我需要它返回到啓動器。

在這種情況下,使用這些標誌,當我返回啓動程序時,啓動程序顯示然後清除然後重新顯示(在另一個onBackPress()上,應用程序然後正確終止)。問題是啓動器顯示兩次。我認爲首先顯示的啓動器是加載的原始拷貝,然後它被替換爲新的拷貝。我還沒有找到加載啓動程序原始副本(在這種情況下)的方法(如果實際上發生了這種情況)。如上所述,這是一個DialogFragment

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

+0

發佈您嘗試過的代碼請 –

+0

您是如何創建DialogFragment的?在這裏發佈代碼。 – Dhiren

+0

向我們展示架構。這應該是一個簡單的解決方案,但如果錯誤地執行了活動的步驟和調用以及處理回來事件,則會出現這種情況。幾年前我有類似的問題 – ZooS

回答

0

爲什麼你不只是完成片段內的活動以返回到啓動器活動?

如果你真的有使用意向,嘗試Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

+0

Launcher Axtivity是加載片段的Activity。因此,我認爲完成片段內的活動不會奏效。然而,你的第二個暗示似乎確實有效。我會繼續測試這個程序,因爲它是新的,如果一切順利的話,我會在幾天內給你答案。 – briano

+0

Intent.FLAG_ACTIVITY_REORDER_TO_FRONT有效。謝謝。 – briano

0

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

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

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

使用本。