动画新的ListView项目

时间:2016-06-07 02:25:23

标签: android listview animation

我有一个包含两个列表视图的活动。当我单击其中一个列表时,单击的项目将从该列表中删除并添加到另一个列表中。我试图在这个过程中提供一些动画。

我可以成功动画删除初始列表中的现有项目。但是,我还无法动画将新项目插入到其他列表中。当我尝试在新列表项上启动动画时出现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;上   空对象引用

请注意,如果我注释掉有问题的行,那么我的列表会正确更新,但没有我想要创建的动画。

2 个答案:

答案 0 :(得分:0)

根据错误,lvSelectedVenues.getChildAt(i)正在撤销null。这可能是因为您尝试获取的子视图当前不可见,因此返回null。

查看这些问题,他们的回答可能会对您有所帮助:Question 1Question 2

您可以使用RecyclerView替代它,它已包含动画。 Here is an example of that

答案 1 :(得分:0)

我强烈建议您转移到RecylerView,它具有默认的ItemAnimator,可以处理不同类型的动画本身插入/删除/更新 - 它也更有效率。一旦你了解它的功能,它就会更容易实现。

  

How to animate RecyclerView items when they appear