android - 滑动删除列表项

标签 android android-layout android-listview android-gesture

我想实现一个滑动手势来删除 ListView 中的行,类似于 android 通知。

现在我只有一个 ListView 和一个 onTouchListener - 也就是说,我已经可以进行滑动检测了。

gestureDetector = new GestureDetector(this, new GestureListener());
onTouchListener = new TouchListener();  
listview.setOnTouchListener(onTouchListener);  

我的 GestureListener 类:

protected class GestureListener extends SimpleOnGestureListener
{
    private static final int SWIPE_MIN_DISTANCE = 150;
    private static final int SWIPE_MAX_OFF_PATH = 100;
    private static final int SWIPE_THRESHOLD_VELOCITY = 100;

    private MotionEvent mLastOnDownEvent = null;

    @Override
    public boolean onDown(MotionEvent e)
    {
        mLastOnDownEvent = e;
        return super.onDown(e);
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
    {
        if(e1 == null){
            e1 = mLastOnDownEvent;
        }
        if(e1==null || e2==null){
            return false;
        }

        float dX = e2.getX() - e1.getX();
        float dY = e1.getY() - e2.getY();

        if (Math.abs(dY) < SWIPE_MAX_OFF_PATH && Math.abs(velocityX) >= SWIPE_THRESHOLD_VELOCITY && Math.abs(dX) >= SWIPE_MIN_DISTANCE ) {
            if (dX > 0) {
                Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
        else if (Math.abs(dX) < SWIPE_MAX_OFF_PATH && Math.abs(velocityY)>=SWIPE_THRESHOLD_VELOCITY && Math.abs(dY)>=SWIPE_MIN_DISTANCE ) {
            if (dY>0) {
                Toast.makeText(getApplicationContext(), "Up Swipe", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(getApplicationContext(), "Down Swipe", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
        return false;
    }
}

我的 TouchListener 类:

protected class TouchListener implements View.OnTouchListener
{
    @Override
    public boolean onTouch(View v, MotionEvent e)
    {
        if (gestureDetector.onTouchEvent(e)){
            return true;
        }else{
            return false;
        }
    }
}

是否有相关的教程/示例?

谢谢

最佳答案

如果您的滑动检测正常,剩下的就是删除该项目。为此,以下代码将删除屏幕外的项目。

yourListViewAdapter.yourListItems.remove(position);
yourListViewAdapter.notifyDataSetChanged();

关于android - 滑动删除列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10836927/

相关文章:

android - 打开应用程序时是否可以删除白屏?

android - 如何在我的代码中动态清空或清除堆内存

android - 打开蓝牙并等待 Intent ?

android - ListView 从底部而不是从顶部填充

android - 如何在具有水平 ScrollView 的 ListView 行上添加多个 ImageView

android - 在 ItemClick 上动态显示类别和子类别

java - 为什么 arraylist 既要清除原始数组又要清除临时数组?

android - 在 android 布局文件中注释

android - 在 ListView 中动态添加新项目

android - 默认情况下微调器实现什么布局?