我创建了一个自定义列表视图,其中我覆盖了onTouchEvent,因此我可以创建自己的pull to refresh listview。我检查用户是否在列表视图的顶部,然后用户向下滑动阈值长度我刷新。我还需要能够将列表视图中的每一行向左滑动以将其删除。我厌倦了使用View.OnTouchListener()并覆盖ontouch。我将View.OnTouchListener()附加到listview中的每一行。我将它们附加在我的baseadapter的getview()中。当我同时使用两个监听器时,我的程序崩溃了。为什么?我怎么能这样做?基本上我需要为整个列表视图以及列表视图中的每一行附加一个监听器。这可能吗?
这是我如何将监听器附加到getview()方法
中列表视图中的每一行 convertView.setOnTouchListener( new View.OnTouchListener() {
float mDownX;
private int mSwipeSlop = -1;
float y;
@Override
public boolean onTouch(final View v, MotionEvent event) {
if (mSwipeSlop < 0) {
mSwipeSlop = ViewConfiguration.get(context).
getScaledTouchSlop();
}
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.d("", "this was clicked " + data.get(position));
mDownX = event.getX();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_MOVE:
{
float x = event.getX() + v.getTranslationX();
float deltaX = x - mDownX;
float deltaXAbs = Math.abs(deltaX);
v.setTranslationX((x - mDownX));
v.setAlpha(1 - deltaXAbs / v.getWidth());
}
break;
case MotionEvent.ACTION_UP:
{
data.remove(position);
Log.d("", "ON UP PRESSED");
notifyDataSetChanged();
return true;
}
}
return true;
}
});
我在OnrefreshListener上创建了我,我将它添加到mainActivity中的listview
l=(CustomList )findViewById(R.id.listView1);
A= new ListBaseAdapter(names,this);
l.setAdapter(A);
l.setRefreshListener(this);