自定义android listview,具有刷新和向左滑动功能

自定义android listview,具有刷新和向左滑动功能,android,android-listview,ontouchlistener,Android,Android Listview,Ontouchlistener,我创建了一个自定义listview,在其中覆盖onTouchEvent,这样我就可以创建自己的pull来刷新listview。我检查用户是否在列表视图的顶部,然后检查用户是否向下滑动阈值长度,然后刷新。我还需要能够向左滑动listview中的每一行来删除它。我厌倦了使用View.OnTouchListener()并重写ontouch。我将View.OnTouchListener()附加到listview中的每一行。我将它们附加到baseadapter的getview()中。当我同时使用两个侦听器

我创建了一个自定义listview,在其中覆盖onTouchEvent,这样我就可以创建自己的pull来刷新listview。我检查用户是否在列表视图的顶部,然后检查用户是否向下滑动阈值长度,然后刷新。我还需要能够向左滑动listview中的每一行来删除它。我厌倦了使用View.OnTouchListener()并重写ontouch。我将View.OnTouchListener()附加到listview中的每一行。我将它们附加到baseadapter的getview()中。当我同时使用两个侦听器时,我的程序崩溃。为什么?我还能怎么做?基本上,我需要为整个listview以及listview中的每一行附加一个侦听器。这可能吗

这就是如何在getview()方法中将侦听器附加到listview中的每一行


你能显示两个侦听器的代码以及如何连接它们吗?@Salauyou好的,我已经发布了它们它们各自工作,但当我将它们组合在一起时,我的应用程序失败,在运行时或应用程序启动后立即崩溃?@Salauyou-当我尝试在列表视图上滚动时,它崩溃
   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;
    }
});
        l=(CustomList )findViewById(R.id.listView1);
    A= new ListBaseAdapter(names,this);
    l.setAdapter(A);
    l.setRefreshListener(this);