2016-06-07 68 views
0

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

我可以成功地在初始列表中删除现有项目的动画。但是,我还无法将新项目插入到另一个列表中。当我尝试在新列表项目上启动动画时,出现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: Attempt to invoke virtual method 'void android.view.View.startAnimation(android.view.animation.Animation)' on a null object reference

需要注意的是,如果我注释掉这些行,然后我的名单正确更新,但没有,我试图创建动画。

回答

0

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

查阅这些问题,他们的回答可以帮助你:Question 1Question 2

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