使用Slide-Like Gmail删除项目列表视图

dmo*_*dez 40 android android-listview

我正在列表视图中开发一个带有商店列表的应用程序.当我listview向右(或向左)滑动项目时,我需要这个项目应该从列表视图中删除.

我有我的listview,只需要这个功能.

提前致谢.

mac*_*ing 19

这就是我意识到这种效果的方式.我们有一个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) {

        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;
    }
});
Run Code Online (Sandbox Code Playgroud)

FunctionDeleteRowWhenSlidingLeft()当我们向左滑动时,函数正在调用,FunctionDeleteRowWhenSlidingRight()- 分别向右滑动.在此功能中,您需要粘贴动画代码.

  • 但如何获得幻灯片行的索引?! (6认同)
  • @macloving,你能否用动画代码扩展你的答案? (5认同)

ira*_*hil 6

Android-Developer的回答指向Roman Nurik在gist.github.com上的代码.此代码已过期.他在他的开源项目Dash Clock中使用这个Swipe来解散监听器.

在使用Gist.github.com中的代码之前,您应该了解一些事项.

  1. gist.Github中过时的代码对触摸非常敏感.如果继续点击ListView中的项目,它将被删除.在更新的代码中,他修复了fling灵敏度.
  2. 如果在ListView中声明了分隔符,则此侦听器无法正常工作.如果需要分隔符,请在ListItem布局中声明它们.
  3. 此代码仍处于测试阶段.买者自负.

所以我建议使用更新的代码.您可以在此处找到更新的来源.


Ale*_*pov 5

您应该考虑的另一个选择是使用Tim Roes的EnhancedListView库. [更新- 2015年8月1日]随着引进的RecycleView该库已被弃用.

前面提到的Roman Nurik的SwipeToDismiss监听器需要API等级12或更高.Jake Wharton移植此代码以支持SwipeToDismissNOA中的所有API级别.

Tim Roes进一步扩展了这个库以支持撤销功能.