我使用DialogFragment
包含webview
。显示DialogFragment
后,按下后退按钮,应用程序将返回活动视图。如果按下显示DialogFragment按钮,webview将再次加载init url。但我的要求是,如果第二次打开DialogFragment,我想上次加载webview显示页面。我怎样才能做到这一点?
我当前的想法是保持DialogFragment实例,当按下show按钮然后检查activity是否已经有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 :(得分: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);
}