1

Я пытаюсь переопределить загрузку URL-адреса при нажатии на ссылку в приложении WebView.Проблема с Android WebView при переопределении URL-адреса Загрузка

Страница загружается, но WebView сохранит последнюю позицию прокрутки и размер содержимого.

Есть ли какой-то параметр, который я забыл установить в WebView для сброса размера содержимого и положения прокрутки при следующей загрузке?

Вот как я использую его:

@SuppressLint("SetJavaScriptEnabled") 
@AfterViews 
protected void afterViews() { 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new WebClient()); 
    webView.setWebChromeClient(new ChromeClient()); 
    webView.loadUrl(url); 
} 
public class WebClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    boolean isValidEmail = url.startsWith("mailto:") && Patterns.EMAIL_ADDRESS.matcher(url.substring("mailto:".length())).matches(); 
    boolean isValidPhone = url.startsWith("tel:") && Patterns.PHONE.matcher(url.substring("tel:".length())).matches(); 
    if (url.startsWith("about:")) { 
     return super.shouldOverrideUrlLoading(view, url); 
    } 
    if (isValidEmail) { 
     Intent sendIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse(url)); 
     startActivity(Intent.createChooser(sendIntent, "")); 
    } else { 
     if (isValidPhone) { 
     Intent dialIntent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); 
     startActivity(Intent.createChooser(dialIntent, "")); 
     } else { 
     WebViewActivity.this.setPageTitle(url); 
     webView.loadUrl(url); 
     } 
    } 
    return true; 
    } 
    @Override 
    public void onPageFinished(WebView view, String url) { 
    //.. 
    } 
} 

public class ChromeClient extends WebChromeClient { 
    @Override 
    public void onProgressChanged(WebView view, int progress) { 
    //... 
    } 
} 

Спасибо.

ответ

0

@Bojan Kopanja, мои искренние извинения за вводящие в заблуждение. Получается, что у меня был веб-просмотр внутри трека, чтобы обновить прослушиватель с помощью прокрутки и удаления, избавившись от проблемы. Спасибо за вашу помощь.

1

Вы пытались установить положение прокрутки в onPageFinished?

@Override 
public void onPageFinished(WebView view, String url) { 
    // other code... 
    view.scrollTo(0,0); 
} 

Это должно установить WebView содержимое обратно в верхней части, а не на старой позиции прокрутки

Edit 1:

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

@Override 
public void onPageFinished(WebView view, String url) { 
    view.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       webView.scrollTo(0, 0); 
      } 
     // Delay the scrollTo to make it work 
     }, 300); 
} 

Пожалуйста, обратите внимание, что WebView на этот раз не является WebView от метода onPageFinished, но WebView принес из Layo ut (тот же, что и в методе afterViews()).

+0

I сделал, без эффекта. Другие идеи? –

+0

Я обновил свой ответ ... Попробуйте добавить некоторую задержку на onPageFinished, поскольку это может не работать всегда, если на страницу требуется некоторое время для загрузки –