我目前有一个 WebView 放置在这样的片段中:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
mContext = container.getContext();
LayoutInflater mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout view = (LinearLayout) mInflater.inflate(R.layout.post_view_layout, container,false);
view.setBackgroundColor(Color.WHITE);
_viewCache = view;
_post_WebView = (WebView) view.findViewById(R.id.post_webview);
setupWebView(_post_WebView); //This method sets up the webview (javascript mode etc.) and set the url to load
return view;
}
现在,每当我旋转时,都会重新创建包含此片段的活动(我不能使用configChanges="orientation"
清单的属性,因为我正在使用 ABS)由于setRetainInstance(true)
片段,它的布局和所有变量都会很好地保留,但是每当我尝试滚动或单击保留的 WebView 我得到一个BadTokenException
(可能是因为用于它的上下文的原始活动在旋转期间被破坏)。
我可以通过在旋转后使用新的活动上下文重新创建 WebView 来解决这个问题,但是由于 webview 显示输入表单,因此在旋转后重新创建它可能对用户来说很乏味。(我已经尝试使用 WebView 的saveState
andrestoreState
方法保存状态,但无济于事)
有什么方法可以在不生成 的情况下恢复或保留 WebView 的完整预旋转状态BadTokenException
,就像configChanges="orientation"
添加属性时一样?