2010-02-10 2 views
1

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

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

@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 Update 1, это не только прокручивает назад к 0,0, но и изменяет масштаб, чтобы соответствовать ширине страницы (аналогично браузера Обзор режима, введенного в 2.1)

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

+0

Вы пытались сравнить источник WebView между двумя версиями, посмотреть, что изменилось? Могу дать понять, что происходит. –

+0

Я попытался сравнить источники. Довольно немного изменений между 1.6 и 2.0 (включая добавление режима обзора). Если вы действительно не знаете внутренних аспектов работы WebView, очень сложно выяснить, что именно вызвало это изменение в поведении. Что еще более расстраивает, так это то, что я даже не могу отлаживать источник, который у меня есть, потому что у меня нет точной версии источника, которая соответствует тому, что работает эмулятор или устройство. – StefanK

+0

Это можно использовать для изменения ориентации, но не для того, чтобы пользователь оставил действие и вернулся позже. Кажется, позиция неправильно хранится в Bundle - или значение игнорируется. – ge0rg

ответ

0

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

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

в активном состоянии. Спасибо

3

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

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