当我设置 listView.onScrollListener(this) 时 onScroll 被调用,但没有任何触摸 [英] onScroll gets called when I set listView.onScrollListener(this), but without any touch
问题描述
当我为我的 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屋!