当前位置: 首页 > 知识库问答 >
问题:

我想检查我的网络视图是否向下滚动

农英杰
2023-03-14

我的应用程序中有一个WebView片段,我想检查一下,用户是否向下滚动了WebView,例如,如果用户向下滚动了我的WebView,我想显示一条Toast消息,“you scrolled down”我在过去3天里一直在尝试这个,我没有得到任何合适的解决方案。我看过很多教程和讨论,没有一个适合我。有人能帮忙吗?

这是我的java代码片段

public class tab1 extends Fragment {

 public ProgressBar bar;
 public FrameLayout frameLayout;
 public tab1()
 {

 }

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
     View rootView = inflater.inflate(R.layout.fragment_tab1, null);

     final SwipeRefreshLayout swipe =(SwipeRefreshLayout)rootView.findViewById(R.id.swiperefresh1);
     frameLayout=(FrameLayout) rootView.findViewById(R.id.frame1);
     bar=(ProgressBar)rootView.findViewById(R.id.progressBar1);
     final WebView view=(WebView) rootView.findViewById(R.id.webview);

     bar.setMax(100);
     view.loadUrl("http://facebook.com");
     view.getSettings().setJavaScriptEnabled(true);
     view.setWebViewClient(new MyWebViewClient());
     view.setWebChromeClient(new WebChromeClient(){

         public void onProgressChanged(WebView view1,int progress){

            frameLayout.setVisibility(View.VISIBLE);
            bar.setProgress(progress);
            if (progress==100){

            frameLayout.setVisibility(View.GONE);
                swipe.setRefreshing(false);
            }

      super.onProgressChanged(view1,progress);
        }
    });

    view.getSettings().setBuiltInZoomControls(true);
    view.getSettings().setDisplayZoomControls(false);
    bar.setProgress(0);

 swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {

            swipe.setColorSchemeResources(
                    R.color.pink, R.color.indigo, R.color.lime);

            String webUrl = view.getUrl();

           view.loadUrl(webUrl);
        }
 });
    return rootView;
}
}

这是我的xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.hackerinside.jaisonjoseph.polysocial.tab1">

<FrameLayout
    android:id="@+id/frame1"
    android:layout_width="match_parent"
    android:layout_height="3dp"
    android:background="@android:color/transparent">

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="fill_parent"
        android:layout_height="3dp"
        android:background="@android:color/transparent"
       android:foregroundGravity="top"
        android:progressDrawable="@drawable/custom_progress"
        android:progress="20"/>

</FrameLayout>


<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swiperefresh1"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</WebView>

</android.support.v4.widget.SwipeRefreshLayout>

添加答案后的错误消息

Cast from null to OnScrollChangeListener requires API level 23 (current min is 15) less... (Ctrl+F1) 

此检查扫描应用程序中的所有AndroidAPI调用,并警告此应用程序目标的所有版本上不可用的任何调用(根据清单中的最小SDK属性)。如果你真的想使用这个API并且不需要支持旧的设备,只需在你的build.gradleAndroidanifest.xml文件中设置minSdkVersion。如果您的代码有意访问较新的API,并且您已经确保(例如使用条件执行)此代码仅在受支持的平台上被调用,那么您可以使用@TargetApi注释注释您的类或方法指定要应用的本地最小SDK,例如@TargetApi(11),以便此检查将11而不是清单文件的最小SDK视为所需的API级别。如果你故意在样式定义中设置android:属性,请确保将其放在value s-vNN文件夹中,以避免在某些设备上遇到运行时冲突,制造商在这些设备上添加了自定义属性,这些属性的id与以后的新属性冲突平台。类似地,您可以在一个XML文件中使用工具: Target etApi="11"来指示元素只会在适当的上下文中膨胀

共有1个答案

彭礼骞
2023-03-14

好的,试试这个

view.setOnScrollChangeListener(new View.OnScrollChangeListener() {
        @Override
        public void onScrollChange(View v, int scrollX, int scrollY, int 
      oldScrollX, int oldScrollY) {

        }
    });

这里的视图是您的WebView对象。:)它的本地方法,所以它会很好地工作。

 类似资料:
  • 如果我遇到静态编程语言类而不是泛型Java类,我想执行特殊功能。如何检测它是否是静态编程语言类? 我希望调用会引发异常或失败,如果类不是科特林。但它很好地包装了Java类。然后我注意到,如果我做,它似乎对所有java类的,即使它们有一个默认的构造函数,这是一个好的标记吗?但是,对于科特林类,这是否也返回值? 说“这是静态编程语言课吗?

  • 问题内容: 我正在学习如何使用TableViews,并且想知道如何查看tableView是向上滚动还是向下滚动?我一直在尝试诸如此类的各种操作,但由于下面是针对滚动视图的操作,并且没有TableView,因此它没有用。任何建议都会很棒,因为我是新来的… 这就是我的tableView代码中的内容 问题答案: 就像@maddy在您的问题评论中说的那样,您可以使用和来检查是否正在滚动,此外,您可以同时使

  • 问题内容: 在Python中,有没有办法来检测是否给定 的网络接口 是 向上 ? 在我的脚本中,用户指定了一个网络接口,但在执行其他操作之前,我想确保该接口已启动并且已分配IP地址。 我在 Linux上 并且我是 root 。 问题答案: 如@Gabriel Samfira所建议,我使用。当IP地址与给定接口关联时,以下函数返回True。 文档在这里

  • 我有一个动态填充的RecyclerView。 当新消息到达时,我使用此代码向下滚动到最后一个条目: 现在的问题是:如果用户已经向上滚动阅读旧消息,它不应该向下滚动。怎么才能检测出来?

  • 问题内容: 在此之前,我的滚动视图下面几乎有一个值得滚动的页面,下面有一个列表视图,但是一旦填充了列表视图,滚动视图就会移到列表视图的顶部。我该如何解决/防止这种情况发生? 滚动查看XML: 我试着做sv.fullScroll(ScrollView.FOCUS_UP); 和所有这些东西到我的scrollview,但它不起作用 问题答案: 首先,您可能已经听说过它,但以防万一: 切勿在内部放一个,因

  • php是否允许您检查网络驱动器是否映射。基本上,在所有计算机上,我们的g:\drive都是映射的。是否可以使用php脚本来检查是否映射了G:\驱动器?为了从映射的驱动器访问目录和文件,我使用UNC名称。 非常感谢帮助