【发布时间】:2015-11-14 16:27:52
【问题描述】:
RecyclerView 与 ListView 不同,它没有一种简单的方法来为其设置空视图,因此必须手动管理它,在适配器的项目计数为 0 的情况下使空视图可见。
实现这一点,起初我尝试在修改底层结构后立即调用空视图逻辑(在我的例子中为ArrayList),例如:
btnRemoveFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
devices.remove(0); // remove item from ArrayList
adapter.notifyItemRemoved(0); // notify RecyclerView's adapter
updateEmptyView();
}
});
它可以做到这一点,但有一个缺点:当最后一个元素被移除时,空视图出现在动画之前移除完成后,立即移除。所以我决定等到动画结束再更新UI。
令我惊讶的是,我找不到在 RecyclerView 中监听动画事件的好方法。首先想到的是像这样使用isRunning 方法:
btnRemoveFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
devices.remove(0); // remove item from ArrayList
adapter.notifyItemRemoved(0); // notify RecyclerView's adapter
recyclerView.getItemAnimator().isRunning(new RecyclerView.ItemAnimator.ItemAnimatorFinishedListener() {
@Override
public void onAnimationsFinished() {
updateEmptyView();
}
});
}
});
不幸的是,在这种情况下,回调会立即运行,因为此时内部 ItemAnimator 仍未处于“运行”状态。因此,问题是:如何正确使用 ItemAnimator.isRunning() 方法,是否有更好的方法来达到预期的效果,即 在移除单个元素的动画后显示空视图完成了?
【问题讨论】:
标签: android animation android-recyclerview