我有一个包含两个列表视图的活动。当我单击其中一个列表时,单击的项目将从该列表中删除并添加到另一个列表中。我试图在这个过程中提供一些动画。
我可以成功动画删除初始列表中的现有项目。但是,我还无法动画将新项目插入到其他列表中。当我尝试在新列表项上启动动画时出现NPE错误。
lvAvailableVenues.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Venue venue = availableVenues.get(position);
availableVenues.remove(position);
availableVenuesAdapter.notifyDataSetChanged();
slideOutRight(position);
lvSelectedVenues.scheduleLayoutAnimation();
selectedVenues.add(availableVenues.get(position));
Collections.sort(selectedVenues, new Venue.VenueComparator());
selectedVenuesAdapter.notifyDataSetChanged();
slideInLeft(venue.getVenueId());
}
});
private void slideOutRight(int position) {
Animation anim = AnimationUtils.loadAnimation(VenueFilterActivity.this, android.R.anim.slide_out_right);
anim.setDuration(500);
lvAvailableVenues.getChildAt(position).startAnimation(anim );
}
private void slideInLeft(int venueId) {
for (int i=0; i<selectedVenues.size(); i++) {
if (selectedVenues.get(i).getVenueId() == venueId) {
Animation anim = AnimationUtils.loadAnimation(VenueFilterActivity.this, android.R.anim.slide_in_left);
anim.setDuration(500);
// this is the line that crashes!!!
lvSelectedVenues.getChildAt(i).startAnimation(anim);
break;
}
}
}
这是我的错误:
java.lang.NullPointerException:尝试调用虚方法&#39; void android.view.View.startAnimation(android.view.animation.Animation)&#39;上 空对象引用
请注意,如果我注释掉有问题的行,那么我的列表会正确更新,但没有我想要创建的动画。
答案 0 :(得分:0)
根据错误,lvSelectedVenues.getChildAt(i)
正在撤销null。这可能是因为您尝试获取的子视图当前不可见,因此返回null。
查看这些问题,他们的回答可能会对您有所帮助:Question 1,Question 2
您可以使用RecyclerView
替代它,它已包含动画。 Here is an example of that
答案 1 :(得分:0)
我强烈建议您转移到RecylerView,它具有默认的ItemAnimator,可以处理不同类型的动画本身插入/删除/更新 - 它也更有效率。一旦你了解它的功能,它就会更容易实现。