此问题由adapter的getview引发
主要由于getview返回 convertview返回为null,
当判断covert!=null时 inflate.from()后 仍然报错
我们倒退一步,先来看看这个adapter是为什么类型的listview 设计的
首先这个adapter的item是只显示一种,还是有多种类型
A.当只有一种布局 则不用覆写getviewtype(int position ),此时确保创建的covertview不为null ,return时也不为null
B.当有多种布局时,例如以下getview()代码:
1 @Override 2 public int getViewTypeCount(){ 3 return 5; 4 } 5 @Override 6 public View getView(int position, View convertView, ViewGroup parent) { 7 if(null!=convertView) 8 Logger.d("getview:::::"+position+"convertView:::::"+convertView.getTag()); 9 Logger.d("getview:::::"+position); 10 ScrollBannerViewHolder scrollBannerViewHolder=null; 11 HomeSectionViewRHolder homeSectionViewRHolder = null; 12 TVCinemaViewHolder tvCinemaViewHolder = null; 13 switch (getItemViewType(position)){ 14 case VIEW_STYLE_POST: 15 if(convertView==null){ 16 convertView = LayoutInflater.from(mContext). 17 inflate(R.layout.active_header, null); 18 scrollBannerViewHolder = new ScrollBannerViewHolder(mContext,convertView); 19 convertView.setTag(scrollBannerViewHolder); 20 }else{ 21 if(convertView.getTag() instanceof ScrollBannerViewHolder) 22 scrollBannerViewHolder=(ScrollBannerViewHolder)convertView.getTag(); 23 } 24 if (null != scrollBannerViewHolder) 25 scrollBannerViewHolder.setViewPager(convertView,getItem(position)); 26 break; 27 28 case VIEW_STYLE_TV_CINEMA: 29 if(convertView==null){ 30 convertView= LayoutInflater.from(mContext). 31 inflate(R.layout.active_header_second, null); 32 tvCinemaViewHolder = new TVCinemaViewHolder(mContext,hrpf.getChildFragmentManager(),convertView); 33 convertView.setTag(tvCinemaViewHolder); 34 }else{ 35 if(convertView.getTag() instanceof TVCinemaViewHolder) 36 tvCinemaViewHolder=(TVCinemaViewHolder)convertView.getTag(); 37 } 38 if (null != tvCinemaViewHolder) 39 tvCinemaViewHolder.setContentView(getItem(position),myJumpTab); 40 break; 41 case VIEW_STYLE_NORMAL: 42 if(convertView==null){ 43 convertView = LayoutInflater.from(mContext). 44 inflate(R.layout.home_section_view_layout, null); 45 homeSectionViewRHolder = new HomeSectionViewRHolder(mContext,convertView); 46 convertView.setTag(homeSectionViewRHolder); 47 }else{ 48 if(convertView.getTag() instanceof HomeSectionViewRHolder) 49 homeSectionViewRHolder=(HomeSectionViewRHolder)convertView.getTag(); 50 } 51 if (null != homeSectionViewRHolder) 52 homeSectionViewRHolder.setContentView(getItem(position),myJumpTab); 53 break; 54 case VIEW_STYLE_CLASS: 55 if(convertView==null){ 56 convertView = LayoutInflater.from(mContext). 57 inflate(R.layout.home_section_view_layout, null); 58 homeSectionViewRHolder = new HomeSectionViewRHolder(mContext,convertView); 59 convertView.setTag(homeSectionViewRHolder); 60 }else{ 61 if(convertView.getTag() instanceof HomeSectionViewRHolder) 62 homeSectionViewRHolder=(HomeSectionViewRHolder)convertView.getTag(); 63 } 64 if (null != homeSectionViewRHolder) 65 homeSectionViewRHolder.setContentView(getItem(position),myJumpTab); 66 break; 67 case VIEW_STYLE_SPECIAL: 68 if(convertView==null){ 69 convertView = LayoutInflater.from(mContext). 70 inflate(R.layout.home_section_view_layout, null); 71 homeSectionViewRHolder = new HomeSectionViewRHolder(mContext,convertView); 72 convertView.setTag(homeSectionViewRHolder); 73 }else{ 74 if(convertView.getTag() instanceof HomeSectionViewRHolder) 75 homeSectionViewRHolder=(HomeSectionViewRHolder)convertView.getTag(); 76 } 77 if (null != homeSectionViewRHolder) 78 homeSectionViewRHolder.setContentView(getItem(position),myJumpTab); 79 break; 80 } 81 return convertView; 82 }
注意当设置getViewTypeCount()返回值大于1时也就是说布局类型有多个,要确保case 判断的类型也有相应的个数,当前getViewTypeCount()返回为5,那么case判断类型的个数也为5个
否则也会出现空指针引发getImportantForAccessibility();
Adapter getview引发的int android.view.View.getImportantForAccessibility() 空指针