2012-04-06 17 views
3

私は自分のアプリケーション用の会話ストリームを格納するAndroidにWebViewを持っています。WebViewのAndroidで常にfalseを返すpageDown(true)

20秒ごとに、アプリケーションはメッセージをサーバーにポーリングし、WebViewを更新します。

WebViewが更新されるたびに、ビューの先頭にスクロールされます。

私はwebView.pageDown(true)を使用しようとしました。しかし、これは常に虚偽に戻っているようです。

本当にありがとうございます。

webView.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", ""); 
    boolean scrolled = webView.pageDown(true); 
    System.out.println("Scrolled is: " + scrolled); 

答えて

2

私は同じ問題を抱えていたので、さらに調査し、これらのここreleated見つけ、::ここでは、コードです

私が管理する唯一のソリューションWebView.pageDown(true)の呼び出しを100ms遅延させるハンドラを作成してから動作します。 Webビューコンポーネントが指定されたhtmlをレンダリングする必要がある時間におそらく依存する必要はありません。

ここ
webView.loadDataWithBaseURL("fake://not/needed", html, "text/html", "utf-8", ""); 
mWebViewScrollHandler.removeCallbacks(mScrollWebViewTask); 
mWebViewScrollHandler.postDelayed(mScrollWebViewTask, 100); 

は、ハンドラのコードです:ここで

は、負荷とスクロールするためのコードで

private final Handler mWebViewScrollHandler = new Handler();  

private final Runnable mScrollWebViewTask = new Runnable() { 
    public void run() { 
     webView.pageDown(true); 
    } 
}; 
+0

を! tHANKS .. –

0

loadDataWithBaseURLのでpageDownは、ページの読み込みが完了する前に実行される非同期です。 @ZoltanFが、それはあなたがページの読み込みにリスナーを追加する必要があり、その後、スクロールんコード

を実行する前にいくつかの時間を待つ必要があるだろうと述べた理由です:

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

はそれがあり

+0

私はまだこれをテストしていますが、それは実行可能な説明のようです。ありがとうございました。 – ZoltanF

0

を役に立てば幸い

WebViewをリロードする代わりに、サーバー上のWebページをajaxを使用して更新するように変更します。これにより、動作をより詳細に制御できます。異なるアプローチで

ショーンが述べたように、イベントリスナーを使用します。私のために働いた

webView.setWebViewClient(new WebViewClient() { 
    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     webView.pageDown(true); 
    } 
}); 
関連する問題