使用ListFragment和动画时的视觉显示错误

时间:2015-08-10 08:01:02

标签: android animation

我遇到了以下错误:我实现了一个显示表内容的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;*/
        }
    });
}

1 个答案:

答案 0 :(得分:1)

列表中另一个项目也是动画的原因很可能是ListView中发生的视图回收。我们使用ListView因为它会回收视图,因此我们可以拥有1000个项目列表而没有任何问题。

您将该视图的alpha设置为0,但同时从适配器中删除该项,并通过notifyDataSetChanged或类似内容通知列表。 此时,ListView刷新并删除您的项目,但视图仍然有动画。该视图现在可以回收并用于不同的数据项。

长话短说,在ListView中删除带动画的内容往往是一项肮脏的工作。这就是RecyclerView更好的方式。你应该考虑使用它 如果您仍想使用ListViewhere是开始学习如何消除项目移除的好地方。