• android -- 小问题 关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题


    关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题:

    原因:

    首先OnScrollListener是焦点滚动的监听事件,须要有焦点才干响应。

    假设在ScrollView中内嵌了ListView之后,动态计算了ListView的高度,并予以设置高度,那么这时用户拖动界面,造成的滚动是ScrollView的滚动。而并不是ListView的滚动,此时焦点是被ScrollView夺去的。ListView自然就不响应OnScrollListener的监听咯。相同的在模拟器上使用鼠标滚轮滑动ListView导致的不响应OnScrollListener也是如此。

    如果和解决的方法:




    假设此时listView位于ScrollView的最底端。而ListView的上方另一些数据控件须要显示,而listView又须要动态设置高度且须要完毕分页载入的功能。如图所看到的。该怎么办呢?

    不要紧张,办法是有的,接着往下看吧:

    1.刚開始我採用监听ScrollView滑动到最底端则载入很多其它的方式。但是这又导致一个问题,当ScrollView内嵌ListView时候,ListViewnotifyDataSetChanged()方法由于须要获取界面资源的原因,在ScrollView中刷新时会导致主线程的卡顿,详细原因不清楚,预计是调用notifyDataSetChanged()方法时,焦点的夺取导致了主线程卡顿。那么这样的情况又不行了。

    2.接着我想试试能不能自己定义ScrollView在内嵌ListView的时候自己主动把焦点给ListView,可这又牵扯到一个问题,ScrollView的滑动也是须要焦点的。纠结了一段时间后,我觉得此解决方案太过麻烦且不通用,一旦遇到别的情况又要又一次自己定义控件。

    SoPASS!

    最后我使出杀手锏。採用ListView + HeadView + footerView的方式。也就是分成三块。自己定义HeadView的显示内容。自己定义footerView的显示内容,既简单又通用,全然满足了我的需求。可是这里有一个须要注意的,这样的转台(ListViewHeadView的情况下)下给lsitView设置OnItemClickListener,那么OnItemClickListener的一个方法:

    public void onItemClick(AdapterView<?

    > arg0, View arg1, int arg2,long arg3){

    }

    此时的点击position应该是arg3,而不是arg2,由于ListView的HeadView会占用一个item


  • 相关阅读:
    Win7系统重启网卡批处理
    第一个应用程序HelloWorld
    JS异步流程控制(序列模式、并发模式、有限并发模式)
    bootstrap+MVC3在Moon.Orm中的应用(含有代码下载)
    google guava使用例子/示范
    证明Hadoop工作的正确性和可靠性只需4步图文并茂的过程
    python 图 自身遍历 及弱引用使用
    界面布局决定系统设计的成败
    .NET:栈的生长与消亡.
    IIS 6 & Server.MapPath
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7058999.html
Copyright © 2020-2023  润新知