0

Ich verwende DialogFragment enthalten eine webview. Nach dem Anzeigen der DialogFragment, wenn die Schaltfläche zurück gedrückt wird, kehrt die App zur Aktivitätsansicht zurück. Wenn Sie die DialogFragment-Schaltfläche drücken, lädt der Webview die Init-URL erneut. Aber meine Anforderung ist, dass wenn ich das DialogFragment zum zweiten Mal öffne, ich möchte, dass die WebView-Seite zuletzt geladen wurde. Wie kann ich das erreichen?DialogFragment findFragmentByTag Rückgabe null

Mein aktueller Gedanke ist, halten Sie die DialogFragment-Instanz, wenn Sie die Show-Taste drücken, dann überprüfen, ob die Aktivität bereits das DialogFragment hat. Aber in meinem Code, findFragmentByTag immer Null, was ist das Problem? Oder sollte ich etwas im DialogFragment arbeiten?

Hauptaktivitätscode:

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 Code:

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

     //other code 
     m_webView.loadUrl(m_loadurl); 

     return m_webView; 
    } 

Antwort

0

Wenn Sie Ihr Dialogfragment drücken wieder zerstört wird und von Backstack entfernt, daher null Sie bekommen während findFragmentByTag Durchführung gut Es ist nicht ratsam, die Ansicht beizubehalten, wenn der Benutzer zurückdrückt, aber alternativ können Sie versuchen, das erstellte Fragment lokal zwischenzuspeichern.

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

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

und das nächste Mal, können Sie diese

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

'prev = dialogMap.get ("mcWebDialog") durchführen get();.' Aber wie es zeigen? – spartawhy117

+0

aktualisiert meine Antwort – Techfist

+0

schließlich wähle ich den Dialog ausblenden, anstatt es zu speichern. – spartawhy117