我遇到了以下错误:我实现了一个显示表内容的ListFragment。当我长按项目时,我想删除表格中的相应行,当然要从列表中删除该项目。为此,我实现了setOnItemLongClickListener。它工作正常。 现在我想让它看起来很漂亮,所以我在监听器中添加了一个动画视图。
view.animate()。setDuration(100)。阿尔法(0)
结果是:当我长按一个项目时,我删除的项目之下的项目也会消失。我想动画也适用于它。这是一种耻辱。有什么想法解决它或任何与此相关的知识错误?
请注意我也尝试通过如下的Runnable()进行操作,但它也不起作用
view.animate()。setDuration(200).alpha(0).withEndAction(new Runnable(){...}
您可以在下面找到我的代码:
public class NoteListFragment extends ListFragment {
private NoteListInterface INoteList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
INoteList.onEdit(position);
}
});
this.getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
// /!\ RESOLVE ISSUE with animation /!\
view.animate().setDuration(100).alpha(0);
return INoteList.onDelete(position);
/*final int pos = position;
view.animate().setDuration(200).alpha(0).withEndAction(new Runnable() {
@Override
public void run() {
try
{
INoteList.onDelete(pos);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
return true;*/
}
});
}
答案 0 :(得分:1)
列表中另一个项目也是动画的原因很可能是ListView
中发生的视图回收。我们使用ListView
因为它会回收视图,因此我们可以拥有1000个项目列表而没有任何问题。
您将该视图的alpha设置为0,但同时从适配器中删除该项,并通过notifyDataSetChanged
或类似内容通知列表。
此时,ListView刷新并删除您的项目,但视图仍然有动画。该视图现在可以回收并用于不同的数据项。
长话短说,在ListView
中删除带动画的内容往往是一项肮脏的工作。这就是RecyclerView
更好的方式。你应该考虑使用它
如果您仍想使用ListView
,here是开始学习如何消除项目移除的好地方。