0

DialogFragmentにはwebviewが含まれています。 DialogFragmentを表示した後、戻るボタンを押すと、アプリはアクティビティビューに戻ります。 show DialogFragmentボタンを押すと、webviewはinit urlを再度ロードします。しかし、私の要件は、DialogFragmentを2度目に開くと、最後にロードされたwebviewショーページが必要なことです。どうすればこれを達成できますか?DialogFragment findFragmentByTag return null

現在のところ、私はDialogFragmentインスタンスを保持していますが、showボタンを押して、アクティビティに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

あなたのダイアログフラグメントが破壊され、backstackから削除され、findFragmentByTagを実行しながら、したがって、あなたがnullになっている、良くユーザーが押したときにビューを保持することをお勧めしませんが、代わりに、作成されたフラグメントをローカルでキャッシュすることができます。

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

'PREV = dialogMap.get( "mcWebDialog")を実行することができます(取得);'が、どのようにそれを表示するには? – spartawhy117

+0

私の答えが – Techfist

+0

に更新されました。 – spartawhy117