2012-04-04 44 views
5

我想要一个ListView,当我点击该项目时,视图向左滑动。如何在点击时在ListView中动画项目?

所以我必须:

listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      arg1.startAnimation(openAnimation); 
     } 
    }); 

然而,动画应用到不同的项目列表,而不是一个被点击。这种行为似乎是随机的,因为它发生在同一时间不止一个项目。

正如我怀疑这是因为适配器重用它的视图来创建项目的方式。我去修改适配器中的getView方法,以在每次调用新的视图时使其膨胀。然后动画不再发生。

有没有办法解决这个问题?我试图将动画移动到适配器中,但是我无法将其与Listview上的其他操作关联。

最终,我希望项目是可点击的,但当左/右滑动显示删除按钮(iOS删除行为)。我在这里错了吗?这应该是可能的,但Android可以在通知栏中实施滑动删除。

+0

“iOS删除行为”否否否否! Android不是iOS!请不要使用iOS设计模式。 Android用户期望和Android用户体验NOT和iPhone体验。 – slayton 2012-04-04 17:44:26

+0

我明白你的关注。我完全反对这个想法。但我不是在这里做决定的人。但是你必须承认它,但是在Android上,轻扫即可删除。实施在那里,只是不同的演示。 – RobGThai 2012-04-04 17:48:29

+0

通知窗格可能有一个自定义的listview实现,因为基本的listview类不支持这个swipe来删除行为 – slayton 2012-04-04 17:51:09

回答

1

我建议你也检查this线程。

我不认为,这是可能的,而无需修改适配器以适应此类行为。据我所知,在实现识别不同列表视图行上的滑动手势的代码时,您不会遇到任何问题,只有通过动画才能在相应行上遵循此手势。

我会重写适配器以适应至少2种行类型:普通行和要删除的行。在适配器的“getView()”方法中,您应该只重用正常视图的convertView。要删除的行不应重复使用,因此动画不会修改其他行。 单击正常行时,应首先告诉适配器,单击位置上的行现在是待删除类型,调用.notifyDatasetChanged(),然后在该行上启动动画。

+0

如何在该行上启动一个动画?我是View v = inflater.inflate(R.layout.list_view_custom,null);然后在一个监听器里我有 final Animation animation = AnimationUtils.loadAnimation(parent.getContext(),R.anim.fade_in_expand); v.startAnimation(animation); 但没有任何反应。 – MinceMan 2012-11-25 18:55:34