Непоследовательное поведение в WebView loadUrl () с использованием локального html-файла и #tags - API 7 и API 10 - PullRequest
1 голос
/ 14 ноября 2011

Резюме:

Проблема при попытке использовать веб-просмотр для открытия стандартного html-файла, расположенного в каталоге «assets». HTML-документ содержит привязки местоположения повсюду, и я пытаюсь перейти непосредственно к ним при открытии документа путем предоставления тега # в URL-адресе, предоставленном методу .loadUrl () объекта «WebView». Это работает корректно и согласованно в эмуляторе с уровнем API 7 (обновленная версия Android 2.1), но демонстрирует противоречивое поведение с эмулятором с уровнем API 10 (обновленная версия Android 2.3.3). Эти несоответствия также наблюдались на реальном устройстве Samsung Galaxy S2 с Android 2.3.3.

Замечания:

При уровне API 7 каждый раз, когда вызывается метод .loadUrl (), страница открывается, и документ располагается в правильном месте привязки, как указано в строке тега URL #.

На уровне API 10 при первой загрузке приложения в эмулятор или реальное устройство поведение метода .loadUrl () соответствует ожидаемому. Документ открывается в правильной позиции привязки. Но при каждом последующем вызове, когда в URL-адресе указывается строка тега URL #, документ открывается и появляется для прокрутки до самого конца текста на странице, игнорируя тег #tag. Исключением является случай, когда документ открывается только со стандартным URL-адресом без присоединенного суффикса #tag.

Соответствующие части кода:

a) OnCreate:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    setContentView(R.layout.help_viewer);  
        engine = (WebView) findViewById(R.id.id_web_engine);  
    // note the “engine” is defined globally to the activity
    }

b) OnResume:

    protected void onResume() {
    super.onResume();
        //
        //
    engine.loadUrl("file:///android_asset/Simple_help_en.html#about_this_app”);
    // works in API 7, inconsistencies with API 10 
        //
        //  
    }       

в) OnStop

    OnStop () { //added in desperation - but made no difference

protected void onStop() {
    super.onStop();
    engine.clearCache(true); 
    engine.clearHistory(); 
    engine = null;
}

Я очень плохо знаком с Android и чувствую, что что-то упустил, так как баланс вероятности предполагает, что скорее всего это ошибка в кодировании, а не ошибка в API. Я искал вопросы / ответы онлайн, но не смог найти соответствующий ответ. Может кто-нибудь указать на мою ошибку и способ решения этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...