首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onScrollListener for WebViewClient安卓

onScrollListener for WebViewClient安卓
EN

Stack Overflow用户
提问于 2016-05-10 19:20:26
回答 1查看 6.2K关注 0票数 0

我有一个Android WebView,我想检测它中的滚动,以隐藏我在屏幕底部的一个条,但我甚至无法检测到滚动监听器。

首先,这声明了我的webview。

代码语言:javascript
复制
mWebView.setWebViewClient(new myWebViewClient());

在我的布局中

代码语言:javascript
复制
<WebView
    android:id="@+id/activity_main_webview"
    android:layout_width="fill_parent"
    android:clickable="false"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_above="@id/buttonBar"
    android:visibility="gone">
</WebView>

然后在这里,我想我应该能够检测到滚动变化,但是它不识别覆盖方法

代码语言:javascript
复制
public class myWebViewClient extends WebViewClient{
    @Override
    protected void onScrollChanged (int l, int t, int oldl, int oldt){
        String testString = Integer.toString(t);
        Log.d("Testing", testString);
    }
}

我认为这可能与我扩展WebViewClient和onScrollChanged无效有关,但我将如何更改它,以便能够检测到网页视图中的滚动,因为我希望在滚动时将屏幕底部的按钮条隐藏起来,并在向下滚动时重新出现。

谢谢

编辑

我的网页现在看起来是这样的:

代码语言:javascript
复制
<test.application.ObservableWebView
    android:id="@+id/scrollableWebview"
    android:layout_width="fill_parent"
    android:clickable="false"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_above="@id/buttonBar"
    android:visibility="gone"/>

然后我声明为这样,然后在我的oncreate中我有以下内容

代码语言:javascript
复制
ObservableWebView mWebView;

mWebView = (ObservableWebView) findViewById(R.id.scrollableWebview);
            mWebView.clearCache(true);
            mWebView.setWebViewClient(new myWebViewClient());
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.loadUrl(currentURL);



            mWebView.setOnScrollChangedCallback(new ObservableWebView.OnScrollChangedCallback(){
                public void onScroll(int l, int t){
                    String testString = Integer.toString(t);
                    Log.d("Testing", testString);
                }
            });


    FATAL EXCEPTION: main
Process: test.application, PID: 5143
java.lang.RuntimeException: Unable to start activity ComponentInfo{test.application/test.application.MainActivity}: android.view.InflateException: Binary XML file line #72: Error inflating class test.application.ObservableWebView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2354)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.access$900(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5300)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)
Caused by: android.view.InflateException: Binary XML file line #72: Error inflating class test.application.ObservableWebView
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:757)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
at android.app.Activity.setContentView(Activity.java:2221)
at test.application.MainActivity.onCreate(MainActivity.java:62)
at android.app.Activity.performCreate(Activity.java:6088)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.access$900(ActivityThread.java:154) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5300) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "test.application.ObservableWebView" on path: DexPathList[[zip file "/data/app/test.application-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at android.view.LayoutInflater.createView(LayoutInflater.java:571)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378) 
at android.app.Activity.setContentView(Activity.java:2221) 
at test.application.MainActivity.onCreate(MainActivity.java:62) 
at android.app.Activity.performCreate(Activity.java:6088) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2416) 
at android.app.ActivityThread.access$900(ActivityThread.java:154) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1322) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5300) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699) 
Suppressed: java.lang.ClassNotFoundException: Didn't find class "test.application.ObservableWebView" on path: DexPathList[[dex file "/data/data/test.application/files/instant-run/dex/slice-support-annotations-24.0.0-alpha1_970e9cd91c4c5137fd4a02c13abfe400ea2225d3-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-internal_impl-24.0.0-alpha1_956ff9371be37fc55e1d852ca9d22c472953ad20-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-com.google.android.gms-play-services-measurement-8.4.0_f4c6c892c1fde4f59a633646b2a693f4e8f51799-classes.dex", dex file "/data/data/test.application/files/instant-run/dex/slice-com.google.android.gms-play-services-basement-8.4.0_38903af7dee8af1f1e19ad
05-17 19:59:34.349 5143-5143/test.application D/AppTracker: App Event: crash
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-10 19:59:48

这是对How to make a Scroll Listener for WebView in Android的潜在复制。但是,关于如何在您的情况下实现解决方案的一些指导可能会更有帮助。

首先,创建类,称为ObservableWebView,它扩展了WebView。你可以看看class definition here

第二,正如所述的here,您需要将Webview“升级”为:

代码语言:javascript
复制
 <com.YourPackageName.ObservableWebView
    android:id="@+id/activity_main_webview"
    android:layout_width="fill_parent"
    android:clickable="false"
    android:layout_height="fill_parent"
    android:layout_alignParentTop="true"
    android:layout_above="@id/buttonBar"
    android:visibility="gone" />

最后,实现实际的滚动监听器,如下所示:

代码语言:javascript
复制
//First, lookup the "custom" `ObservableWebView` **instead** of `WebView`
ObservableWebView yourObservableWebView  = (ObservableWebView) findViewById(R.id.activity_main_webview);
//then set the scroll callback
 yourObservableWebView.setOnScrollChangedCallback(new OnScrollChangedCallback(){
    public void onScroll(int l, int t){      
       String testString = Integer.toString(t);
       Log.d("Testing", testString);
    }
 });

我希望这有助于您理解需要做什么来实现建议的解决方案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37147191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档