我正在将一个iPhone应用移植到Android应用,其中一个困难是重新创建iPhone原生功能。
我发现了iPhone的原生功能: 当用户在列表视图中执行滑动触摸时,会出现删除按钮。
在Android中有相应的版本吗? 它能被使用、重复使用/自定义吗?
我正在将一个iPhone应用移植到Android应用,其中一个困难是重新创建iPhone原生功能。
我发现了iPhone的原生功能: 当用户在列表视图中执行滑动触摸时,会出现删除按钮。
在Android中有相应的版本吗? 它能被使用、重复使用/自定义吗?
这个实现起来有点复杂。从高层次上讲,我会这样做:
创建一个自定义的ViewGroup/Layout来容纳列表项。在这个布局中,您可以放置文本行、图像或其他内容以及删除按钮。此外,您还需要监听手势以隐藏或显示删除按钮。
在您的列表适配器中,您需要跟踪哪个项目正在显示删除按钮,哪个不是。此外,您还需要为每个列表项删除按钮应用单击侦听器。每次在列表项上分配这些状态时,您应该设置setTag(...)并存储列表项位置,以便在单击时可以告诉哪个项目编号必须被删除。
删除后,您必须刷新列表以使其生效。根据您使用的适配器类型,这将决定如何刷新适配器。
希望这有些意义。但我肯定认为这是最简单的方法,因为我已经用类似的功能做过几次了。
这是我实现此效果的方式。我们有一个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()。在这个函数中,您需要粘贴动画代码。
附注:对于我的糟糕英语表示歉意。随时乐意提供帮助。
我猜你可以尝试在listview本身上实现手势监听器,但是可能很难获得正确的ID。由于我自己没有做过,所以无法回答确切的问题。
否则,您可以将自己的视图作为列表视图中的项目,并在所有子项上添加手势监听器。
网格布局上的Fling手势检测 进行一些基本阅读和代码示例
我认为没有内置的API函数可以做到这一点。
然而,一个解决方法是在列表项视图中使用onFling函数。你可能可以使用它来实现你想要的功能。