0

我使用DialogFragment包含一個webview。在顯示DialogFragment後,當按下後退按鈕時,應用程序將返回活動視圖。如果按下顯示DialogFragment按鈕,webview將再次加載init url。但我的要求是,如果第二次打開DialogFragment,我想上次加載的webview顯示頁面。我怎樣才能做到這一點?DialogFragment findFragmentByTag return null

我當前的想法是保持DialogFragment實例,當按下顯示按鈕,然後檢查活動是否已經有DialogFragment。但在我的代碼中,findFragmentByTag總是返回null,那有什麼問題?或者我應該在DialogFragment中做一些工作?

主要活動代碼:

mcWebViewDialog m_webviewDialog = null; 

public void showWebviewDialog() 
{ 

    FragmentManager fragmentManager=getFragmentManager(); 
    FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
    Fragment prev=fragmentManager.findFragmentByTag("mcWebDialog"); 

    if(prev!=null) 
    { 
     Log.v("seayoung","m_webviewDialog not null"); 
     fragmentTransaction.show(prev); 
    } 
    else 
    { 
     Log.v("seayoung","m_webviewDialog null"); 
     m_webviewDialog=mcWebViewDialog.newInstance(); 
     m_webviewDialog.set_loadurl("file:///android_asset/input.html"); 
     m_webviewDialog.show(fragmentManager,"mcWebDialog"); 
    } 
} 

WebViewDialog代碼:

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) 
    { 

     //other code 
     m_webView.loadUrl(m_loadurl); 

     return m_webView; 
    } 

回答

0

當你按下回你的對話片段被破壞並從堆棧中刪除,因此你是在執行findFragmentByTag越來越空,以及當用戶按下後不會是一個好主意,但作爲替代方法,您可以嘗試在本地緩存創建的片段,如下所示。

HashMap<String,WeakReference<DialogFragment>> dialogMap = new HashMap<>(); 

// call this before callin `show` 
dialogMap.put(TAG,new WeakReference<>(YOUR_FRAGMENT)); 

和接下來的時間,然後才能執行此

DialogFragment prev=fragmentManager.findFragmentByTag("mcWebDialog"); 
if(prev == null){ 
    prev = dialogMap.get("mcWebDialog").get(); 
} 
if(prev!=null){ 
    Log.v("seayoung","m_webviewDialog not null"); 
    fragmentTransaction.show(prev); 
} 
+0

'分組= dialogMap.get( 「mcWebDialog」)獲得();'但是如何表現呢? – spartawhy117

+0

最後我更新了我的回答 – Techfist

+0

,我選擇隱藏對話框而不是存儲它。 – spartawhy117