我目前正在将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
和restoreState
方法保存状态,但无济于事
有没有办法在不生成BadTokenException
的情况下将WebView恢复或保留在完整的预旋转状态,就像添加configChanges="orientation"
属性时一样?