Attempt to invoke virtual method 'int android.view.View.getImportantForAccessibility() 解決方案


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM