Android列表视图项的滑入按钮效果

Android列表视图项的滑入按钮效果,android,listview,android-listview,slidetoggle,Android,Listview,Android Listview,Slidetoggle,我正在将iPhone应用程序移植到android应用程序中,其中一个困难是重新创建iPhone固有的功能 我发现了iPhone的本机功能: 当用户在列表视图中对列出的项目执行滑动触摸时,会出现删除按钮 安卓系统中有这个版本吗? 它可以被使用和重用/定制吗?我想您可以尝试在listview本身上实现手势侦听器,但可能很难获得正确的id。因为我自己没有这样做,所以我无法准确回答 否则,您可能可以将自己的视图作为listview中的项,并在所有孩子上设置一个手势侦听器 对于一些基本的阅读和代码示例来

我正在将iPhone应用程序移植到android应用程序中,其中一个困难是重新创建iPhone固有的功能

我发现了iPhone的本机功能: 当用户在列表视图中对列出的项目执行滑动触摸时,会出现删除按钮

安卓系统中有这个版本吗?
它可以被使用和重用/定制吗?

我想您可以尝试在listview本身上实现手势侦听器,但可能很难获得正确的id。因为我自己没有这样做,所以我无法准确回答

否则,您可能可以将自己的视图作为listview中的项,并在所有孩子上设置一个手势侦听器


对于一些基本的阅读和代码示例

来说,这只是实现起来有点复杂而已。这就是我从更高的层次上所要做的

  • 创建自定义视图组/布局以容纳列表项。在这个布局中,你有你的文本行图像或任何你有的东西,还有删除按钮。您还可以在此收听隐藏或取消隐藏删除按钮的手势

  • 在列表适配器中,您需要跟踪哪个项目显示了删除按钮,哪个项目没有。此外,您还需要对每个列表项删除按钮应用单击侦听器。每次在列表项上指定这些状态时,都应设置标记(…)并存储列表项位置,以便在单击时可以知道必须删除的项目编号

  • 删除后,必须刷新列表才能使其生效。根据您使用的适配器类型,这将决定如何刷新适配器


  • 希望这有点道理。但我肯定认为这是最简单的方法,因为我已经用类似的功能做过几次了

    我不认为有任何内置的API函数可以做到这一点


    但是,一种解决方法是在listitem中的视图上使用onFling函数。你也许可以用它来实现你想要的。

    这就是我如何实现这种效果的。我们有一个ListView lvSimple,并将onTouchListener添加到我们的lvSimple中。这是我的工作代码

    float historicX = Float.NaN, historicY = Float.NaN;
    static final int DELTA = 50;
    enum Direction {LEFT, RIGHT;}
    ...
    ListView lvSimple = (ListView) findViewById(R.id.linLayout);
    ...
    lvSimple.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            // TODO Auto-generated method stub
            switch (event.getAction()) 
            {
                case MotionEvent.ACTION_DOWN:
                historicX = event.getX();
                historicY = event.getY();
                break;
    
                case MotionEvent.ACTION_UP:
                if (event.getX() - historicX < -DELTA) 
                {
                    FunctionDeleteRowWhenSlidingLeft();
                    return true;
                }
                else if (event.getX() - historicX > DELTA)  
                {
                    FunctionDeleteRowWhenSlidingRight();
                    return true;
                } break;
                default: return false;
            }
            return false;
        }
    });
    
    float historicX=float.NaN,historicY=float.NaN;
    静态最终积分增量=50;
    枚举方向{左,右;}
    ...
    ListView lvSimple=(ListView)findViewById(R.id.linLayout);
    ...
    lvSimple.setOnTouchListener(新的OnTouchListener(){
    @凌驾
    公共布尔onTouch(视图v,运动事件)
    {
    //TODO自动生成的方法存根
    开关(event.getAction())
    {
    case MotionEvent.ACTION\u DOWN:
    historicX=event.getX();
    历史性=event.getY();
    打破
    case MotionEvent.ACTION\u UP:
    if(event.getX()-historicX<-DELTA)
    {
    函数DeleteRowWhenSlidingLeft();
    返回true;
    }
    else if(event.getX()-historicX>DELTA)
    {
    函数DeleteRowWhenSlidingRight();
    返回true;
    }中断;
    默认:返回false;
    }
    返回false;
    }
    });
    
    其中,向左滑动时调用函数FunctionDeleteRowWhenSlidingLeft(),向右滑动时调用函数DeleteRowWhenSlidingRight。在此函数中,需要为动画粘贴代码


    另外,我很抱歉我的英语不好。总是乐于助人。

    相反,他们有特殊的行为。。就像长时间点击一个选项列表……我真的很想知道这一点……)