当我设置 listView.onScrollListener(this) 时 onScroll 被调用,但没有任何触摸 [英] onScroll gets called when I set listView.onScrollListener(this), but without any touch

查看:11
本文介绍了当我设置 listView.onScrollListener(this) 时 onScroll 被调用,但没有任何触摸的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我为我的 ListView 设置 onScrollListener 时,它会调用 onScroll.这会导致崩溃,因为某些内容尚未初始化.

When I set the onScrollListener for my ListView, it calls onScroll. This causes a crash because certain things haven't been initialized.

这正常吗?注意:这是在我什至没有碰手机的情况下发生的.

Is this normal? Note: this is happening without me even touching the phone.

public class MainActivity1 extends Activity implements OnClickListener, OnScrollListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout1);

    ListView lv = (ListView)findViewById(R.id.listview1);
    lv.setOnScrollListener(this);
    ...
}
...
public void onScroll(AbsListView view, int firstVisibleItem,
        int visibleItemCount, int totalItemCount){
    if( firstVisibleItem+visibleItemCount == totalItemCount ){
        pullContactList();
    }
}

推荐答案

这是正常的,因为AbsListView(ListView<的超类)中setOnScrollListener的源码/code>) 这样做:

It's normal because the source code for setOnScrollListener in AbsListView (the superclass of ListView) does this:

 public void setOnScrollListener(OnScrollListener l) {
        mOnScrollListener = l;
        invokeOnItemScrollListener();
    }

invokeOnItemScrollListener 这样做:

/**
     * Notify our scroll listener (if there is one) of a change in scroll state
*/
    void invokeOnItemScrollListener() {
        if (mFastScroller != null) {
            mFastScroller.onScroll(this, mFirstPosition, getChildCount(), mItemCount);
        }
        if (mOnScrollListener != null) {
            mOnScrollListener.onScroll(this, mFirstPosition, getChildCount(), mItemCount);
        }
        onScrollChanged(0, 0, 0, 0); // dummy values, View's implementation does not use these.
    }

根据您尝试做什么,有多种方法可以避免此问题.

depending on what it is you're trying to do, there are a number of ways to avoid this problem.

由于您只想在用户实际滚动时执行此操作,因此我想您可以执行以下操作:

Since you only want to do this if the user actually scrolled, I suppose you could do something like:

    lv.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View view, MotionEvent motionEvent) {
                    if(view == lv && motionEvent.getAction() == MotionEvent.ACTION_SCROLL) {
                      userScrolled = true;
    }
return false;
                }
            });

那么..

lv.setOnScrollListener(new AbsListView.OnScrollListener() {
    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount){
        if(userScrolled && firstVisibleItem+visibleItemCount == totalItemCount ){
            pullContactList();
        }
    }

});

这篇关于当我设置 listView.onScrollListener(this) 时 onScroll 被调用,但没有任何触摸的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆