2013-04-15 3 views
1

В моем приложении у меня есть страница HTML, загруженная в WebView. Я реализую кнопку switchView, которая загружает одну и ту же страницу, но на другом языке. Я хочу сохранить положение прокрутки WebView при переключении языка. После некоторых исследований SO, я реализовал следующее.Ведение позиции прокрутки в WebView

Это первая WebView

 switchB = (Button)findViewById(R.id.button1); 
     webView = (WebView) findViewById(R.id.page1); 
     webView.loadUrl("file:///android_asset/try.html"); 

     switchB.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent mIntent = new Intent (MainActivity.this, SwitchedView.class); 
       mIntent.putExtra("scroll", calculateProgression(webView)); 
       startActivity(mIntent);    
      } 
     }); 
    } 

private float calculateProgression(WebView content) { 
     float positionTopView = content.getTop(); 
     float contentHeight = content.getContentHeight(); 
     float currentScrollPosition = content.getScrollY(); 
     float percentWebview = (currentScrollPosition - positionTopView)/contentHeight; 
     return percentWebview; 
    } 

С этим, я передаю Свиток к следующей деятельности, которая является WebView загрузки той же страницы.

 Intent i = getIntent(); 
     Bundle extras = i.getExtras(); 
     float scrollp = extras.getFloat("scroll"); 

     WebView webView = (WebView) findViewById(R.id.page2); 
     webView.loadUrl("file:///android_asset/try2.html"); 

     float webviewsize = webView.getContentHeight() - webView.getTop(); 
     float positionInWV = webviewsize * scrollp; 
     int positionY = Math.round(webView.getTop() + positionInWV); 
     webView.scrollTo(0, positionY); 

Это не указывает положение прокрутки в положение прокрутки. Я делаю что-то неправильно?

ответ

3

webView.loadUrl ("file: ///android_asset/try2.html"); асинхронно, поэтому scrollTo будет выполняться до загрузки страницы. Поэтому вам нужно вызвать scrollTo только после успешной загрузки страницы. Вы можете достичь этого с помощью следующего фрагмента.

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     webView.scrollTo(0, positionY); 
    } 

    @Override 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     //error 
    } 
}); 
+0

не wokring для меня –

Смежные вопросы