4

我目前有一个 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 的saveStateandrestoreState方法保存状态,但无济于事)

有什么方法可以在不生成 的情况下恢复或保留 WebView 的完整预旋转状态BadTokenException,就像configChanges="orientation"添加属性时一样?

4

0 回答 0