在Android的listview中滑动时显示删除按钮

在Android的listview中滑动时显示删除按钮,android,listview,onfling,Android,Listview,Onfling,扩展到另一个Stackoverflow问题,我已经实现了一些手势检测代码,这样我就可以检测listview中的一行(在FrameLayout中)何时被刷过。在这里,我按照Damian的问题/答案,了解如何从适配器获取单个行/视图。 我的onFling中有获取行视图的代码,并尝试将xml布局中设置为不可见的删除按钮设置为可见。然而,这并没有发生。我想知道如何在滑动时使按钮在列表视图中可见 class MyGestureDetector extends SimpleOnGestureListene

扩展到另一个Stackoverflow问题,我已经实现了一些手势检测代码,这样我就可以检测listview中的一行(在FrameLayout中)何时被刷过。在这里,我按照Damian的问题/答案,了解如何从适配器获取单个行/视图。

我的onFling中有获取行视图的代码,并尝试将xml布局中设置为不可见的删除按钮设置为可见。然而,这并没有发生。我想知道如何在滑动时使按钮在列表视图中可见

class MyGestureDetector extends SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        try {

            if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
                    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                int itemId = MyClass.this.lv.pointToPosition(
                        (int) e1.getX(), (int) e1.getY());

                Log.v("item id", String.valueOf(itemId));
                View v = MyClass.this.adapter
                        .getViewOnScreen(itemId);
                Button delete = (Button) v.findViewById(R.id.button_delete);

                delete.setVisibility(View.VISIBLE);
                //MyClass.this.adapter.notifyDataSetChanged();


            }

        } catch (Exception e) {
            // nothing
        }
        return false;
    }
}
我的列表适配器代码与引用的问题相同

编辑:我尝试在listview上使用getChildAt()来获取行的视图,当有一个屏幕或更少的项目时,这会起作用,但是当返回的视图多于一个时,错误的删除按钮就会显示出来


编辑2:我用问题的答案让它工作起来:

我曾经在我的应用程序中实现过类似的东西。我的做法是:

public class MyGestureDetector extends SimpleOnGestureListener {
    private ListView list;

    public MyGestureDetector(ListView list) {
        this.list = list;
    }

    //CONDITIONS ARE TYPICALLY VELOCITY OR DISTANCE    
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if (INSERT_CONDITIONS_HERE)
            if (showDeleteButton(e1))
                return true;
        return super.onFling(e1, e2, velocityX, velocityY);
    }

    private boolean showDeleteButton(MotionEvent e1) {
        int pos = list.pointToPosition((int)e1.getX(), (int)e1.getY());
        return showDeleteButton(pos);
    }

    private boolean showDeleteButton(int pos) {
        View child = list.getChildAt(pos);
        if (child != null){
            Button delete = (Button) child.findViewById(R.id.delete_button_id);
            if (delete != null)
                if (delete.getVisibility() == View.INVISIBLE)
                    delete.setVisibility(View.VISIBLE);
                else
                    delete.setVisibility(View.INVISIBLE);
            return true;
        }
        return false;
    }
}

这对我来说很有效,希望你能让它发挥作用,或者至少能给你一些提示

Hi在片段中使用相同的代码,但在onFling方法中,我在e1处得到null。你能帮帮我吗?@GangadharNimbally你可能应该从你自己的问题开始,把完整的stacktrace和你的代码放在哪里。我已经实现了上面的类,但是它对我不起作用。新MyGestureDetector(lst_样本列表);就像我说的,@HiteshDhamshaniya,你应该开始你自己的问题,你可以把完整的堆栈跟踪和你的代码放在哪里。@Heskja代码对我有用。但是我应该在这里插入什么样的条件呢?