此問題由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() 空指針