Подтвердить что ты не робот

Сохранение состояния WebView и перезагрузка позиции

Я знаю, что есть несколько вопросов об этом, но все они кажутся старыми и больше не работают - по крайней мере, для меня. Я пытаюсь сохранить позицию webview после того, как пользователь уйдет или перезагрузит приложение. Я знаю, что этот код можно использовать для сохранения и загрузки Webview:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    myWebview.saveState(outState);
}

и onCreate:

if (savedInstanceState != null) {
    myWebview.restoreState(savedInstanceState);
}

Но на странице просмотра веб-обозревателя Android говорится следующее о saveState:

"Сохраняет состояние этого WebView, используемого в onSaveInstanceState (Bundle). Обратите внимание, что этот метод больше не хранит данные отображения для этого WebView. Предыдущее поведение потенциально может утечка файлов, если restoreState (Bundle) никогда не вызывалось."

Ссылка - https://developer.android.com/reference/android/webkit/WebView.html

Если я ошибаюсь, и это ПОЛНОСТЬЮ работает, это может быть моя реализация другой функции, которая сохраняет выбор spinner страницы, показанной в WebView, и загружается очень похоже, как показано выше. Возможно, использование обоих параметров не позволяет загружать позицию WebView и только страницу? Вот что я имею в настоящее время, чтобы сохранить, какая страница HTML загружена в WebView, когда пользователь перезагружает приложение.

Мой onCreate:

if (savedInstanceState != null){
    mySpinner.setSelection(prefs.getInt("spinnerSelection", 0));
}

my onSaveInstanceState:

@Override
public void onSaveInstanceState(Bundle savedInstanceState){

    SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getActivity().getBaseContext());
    SharedPreferences.Editor editor = getPrefs.edit();

    values = Integer.parseInt(getPrefs.getString("pref_Sections", "1"));
    switch (values) {
        case 1:
            int selectedPosition1 = mySpinner.getSelectedItemPosition();
            editor.putInt("spinnerSelection1", selectedPosition1);
            editor.commit();
            break;
        case 2:
            int selectedPosition2 = mySpinner.getSelectedItemPosition();
            editor.putInt("spinnerSelection2", selectedPosition2);
            editor.commit();
            break;
    }
    super.onSaveInstanceState(savedInstanceState);
}

Есть ли у кого-нибудь отзывы по этой проблеме, или это просто не работает больше, как описано в Android Developer WebView? Я рассматривал математическое обходное решение, но в настоящий момент это связано с моим опытом, и я должен был бы узнать больше об этом (плюс мне не нравится математика вообще!)

Спасибо всем ответам!

4b9b3361

Ответ 1

Вы можете использовать getScrollY(), чтобы получить вертикальное положение вашего веб-представления. Сохраните его в onSaveInstanceState

Затем используйте scrollTo (x, y) для восстановления позиции:

 yourWebview.scrollTo(0, savedYPosition);