Jam*_*ieB 0 android fragment webview
我在阻止WebView在retainInstance设置为true的片段内时重新加载时遇到问题.
我试过的路线:
SaveInstanceState(由于retainInstance,不会在旋转时传递包)一个自定义包,保存在onSaveInstanceState上并在create中保存保留WebView引用并尝试将其添加回视图层次结构
必须有一个更简单的方法吗?
你可以很容易地做到这一点.由于您已经保留了实例,因此WebView
在调用Fragment的onDestroyView()时,请保留对Fragment中的引用并将其与父项分离.如果它是非null,只需在onCreateView()中返回它.例如:
public class RetainedWebviewFragment extends Fragment {
private WebView mWebView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (mWebView == null) {
mWebView = new WebView(getActivity());
}
return mWebView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
if (getRetainInstance() && mWebView.getParent() instanceof ViewGroup) {
((ViewGroup) mWebView.getParent()).removeView(mWebView);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,您将在第一个方向更改时泄漏一个对第一个Activity的引用 - 我还没有想到如何避免.t根据我的知识,无法在View上设置上下文.但是,如果你对那个内存泄漏没问题,这确实有效.
编辑:或者,如果你像我在这个例子中那样以编程方式实例化它,你可以使用它getActivity().getApplicationContext()
来避免泄漏活动.如果使用提供的LayoutInflater,它将在充气时将视图的应用程序的上下文赋予.
不要将应用程序上下文用于WebView - 这会在显示下拉视图和潜在的其他问题时导致意外崩溃.
归档时间: |
|
查看次数: |
1497 次 |
最近记录: |