Проблема сохранения позиции прокрутки WebView во время изменения ориентации в Android 2.1

У меня проблема с сохранением текущей позиции прокрутки содержимого, загруженного в элемент управления Android WebView во время изменения ориентации. В настоящее время проблема существует только в Android 2.1 и Android 2.1, обновление 1

Код, который я использую, основан на приложении Browser по умолчанию и выглядит следующим образом:

@Override
protected void onCreate(Bundle savedInstanceState)
{
  super.onCreate(savedInstanceState);
  mWebView = new WebView(this);
  setContentView(mWebView);
  mWebView.setWebViewClient(mWebViewClient);

  if (savedInstanceState != null)
  {
    final WebBackForwardList list = mWebView.restoreState(savedInstanceState);
    if (list == null)
      return;

    if (savedInstanceState.containsKey("currentPicture"))
    {
       final File f = new File(savedInstanceState.getString("currentPicture"));
       mWebView.restorePicture(savedInstanceState, f);
       f.delete();
    }
  }else
    mWebView.loadUrl("http://slashdot.org/");
 }

 @Override
 protected void onSaveInstanceState(Bundle outState)
 {
   final WebBackForwardList list = mWebView.saveState(outState);
   File mThumbnailDir = getDir("thumbnails", 0);
   if (list != null)
   {
     final File f = new File(mThumbnailDir, mWebView.hashCode() + "_pic.save");
     if (mWebView.savePicture(outState, f))
        outState.putString("currentPicture", f.getPath());
   }
 }

Этот код работает в Android 1.5, 1.6 и 2.0.1. В Android 2.1 тот же код восстанавливает позицию за доли секунды, но затем страница перезагружается и прокручивается до позиции 0,0.

В Android 2.1, обновление 1, он не только прокручивает обратно до 0,0, но также изменяет масштаб, чтобы соответствовать ширине страницы (аналогично режиму обзора браузера, представленному в 2.1)

Кто-нибудь знает об обходном пути или имеет какое-либо представление о том, что может вызвать такое поведение?

2 ответа

Просто загрузите WebViewState в onRestoreInstanceState.

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    myWebView.restoreState(savedInstanceState);
}

Меняя ориентацию с альбомной на портретную или наоборот, запускается новое действие. Следовательно вы открыты как обновленная деятельность. Поместите код в ваш AndroidManifest.xml и перезагрузите приложение.

 "activity android:name=".Main
 android:configChanges="orientation"

в вкладке деятельности. Спасибо

Другие вопросы по тегам