我正在将iPhone应用程序移植到Android应用程序中,其中一个难点是重新创建iPhone原生的功能。
我找到了iPhone的原生功能: 当用户在列表视图中列出的项目上执行幻灯片触摸时,会出现删除按钮。
Android中有这个版本吗? 可以使用和重复使用/定制吗?
答案 0 :(得分:1)
这实现起来有点复杂。这就是我要从更高层面谈论的内容。
创建自定义ViewGroup / Layout以保存列表项。在此布局中,您可以使用文本行图像或任何内容,还可以使用删除按钮。您还可以在此处收听手势以隐藏或取消隐藏删除按钮。
在列表适配器中,您需要跟踪哪个项目显示删除按钮,哪个项目不显示。此外,您还需要为每个列表项删除按钮应用单击侦听器。每次在列表项上指定这些状态时,您应该设置标签(...)并存储列表项位置,以便在单击时可以确定必须删除哪个项目编号。
删除后,您必须刷新列表才能使其生效。根据您使用的适配器类型,确定如何刷新适配器。
希望这有一定道理。但我绝对认为这是最简单的方法,因为我已经用类似的功能做了几次。
答案 1 :(得分:0)
我猜你可以尝试在listview本身上实现手势监听器,但可能很难获得正确的id。由于我自己没有这样做,我无法准确回答。
否则,您可以将自己的视图作为列表视图中的项目,并在所有子项上都有一个手势监听器。
Fling gesture detection on grid layout 对于一些基本的阅读和代码示例
答案 2 :(得分:0)
我认为没有任何内置的API函数可以做到这一点。
但是,解决方法是在listitem中的视图上使用onFling函数。您可以使用它来完成您想要的任务。
答案 3 :(得分:0)
这就是我意识到这种效果的方式。我们有一个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;
}
});
其中函数FunctionDeleteRowWhenSlidingLeft()在我们向左滑动时调用,FunctionDeleteRowWhenSlidingRight - 分别向右移动。在此功能中,您需要粘贴动画代码。
PS。我很抱歉我的英语不好。一直很乐意提供帮助。