android expandlistview group imageview報錯的解決辦法

來源:互聯網
上載者:User

android expandlistview group imageview報錯的解決辦法

在expandListView的group中如果包含imageview發現,報錯。提示無法將imageview轉換成TextView.查看源碼發現,SimpleExpandableListAdapter中有如下方法:

 

private void bindView(View view, Map data, String[] from, int[] to) {        int len = to.length;         for (int i = 0; i < len; i++) {            TextView v = (TextView)view.findViewById(to[i]);            if (v != null) {                v.setText((String)data.get(from[i]));            }        }    }

可以看出bindView把所有view都當textView來處理了。真是完全沒有老大哥simpleAdapter的防範,可以自動判斷類型綁定。網上普遍給出的方法是重寫bindView方法:

 

 

public class MyExpandableListAdapter extends BaseExpandableListAdapter{        private void bindView(View view, Map data, String[] from, int[] to) {                int len = to.length;                boolean isBound = false;                for (int i = 0; i < len; i++) {                   final View v = view.findViewById(to[i]);                 if (v!=null) {                final Object _data = data.get(from[i]);                String text = _data == null ? "" : data.toString();                if (text == null) {                    text = "";                }                          if (mViewBinder != null) {//如果Binder不為空白,使用Binder進行處理                                        isBound = mViewBinder.setViewValue(v, data.get(from[i]), text);                                }                                if (!isBound) {//如果Binder跳過,使用原來的方法進行處理                                        TextView _v = (TextView)v;                                        _v.setText((String)data.get(from[i]));                                }                                                       }                }        }}

不過對於我來說,盡量不重寫SDK沒有建議你複寫的方法,因為複寫之後效能和安全很難保證,最好能讓原SDK去處理。繼續查看原始碼,發現當我們返回的類型不是一個view類型,而是一個確切的布局類型時,sdk就能識別,並不再當TEXTview處理,所以我的處理方案是將convertview轉換成我那個layout檔案的布局類型:

 

 

  @Override        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {          ItemViewHolder holder = null;           if(convertView == null){           holder=new ItemViewHolder();           convertView = inflater.inflate(R.layout.down_exam_vitem, null);            holder.itemImg = (ImageView)convertView.findViewById(R.id.exam_vitem_img);           convertView.setTag(holder);           }else{holder = (ItemViewHolder)convertView.getTag();           }           itemView = (RelativeLayout)convertView;           return itemView;        }

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.