自定义适配器ViewHolder问题

我正在尝试使用自定义适配器列表。 此列表有两种类型的行,但我只使用一种布局(将可见性设置为View.GONE不需要的项目View.GONE )。 但是,当我尝试访问编辑框样式的行时,我不断收到类强制转换exception。 我对自定义适配器的经验很少。 非常感谢您的帮助:D

这是代码(我删除了setonclicklisteners以保持简短):

 public class SubEventListAdapter extends ArrayAdapter { private ArrayList _items; private Context _context; public SubEventListAdapter(Context context, ArrayList items) { super(context, R.layout.view_select_event_item3, items); this._items = items; this._context = context; } static class ViewHolder { TextView text; ImageButton imagebutton; ImageView check; EditText editText; Button button; } @Override public int getCount() { return this._items.size(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { View v = convertView; final ViewHolder viewHolder; final MobileSubEvent event = _items.get(position); if (v == null) { LayoutInflater _inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = _inflater.inflate(R.layout.view_select_event_item3, null); viewHolder = new ViewHolder(); viewHolder.imagebutton = (ImageButton) v.findViewById(R.id.ibNext); viewHolder.text = (TextView) v.findViewById(R.id.EVENT); viewHolder.check = (ImageView) v.findViewById(R.id.ivCheck); viewHolder.button = (Button) v.findViewById(R.id.bScanOrSign); viewHolder.editText = (EditText) v.findViewById(R.id.etInput); v.setTag(viewHolder); } else { v = convertView; viewHolder = (ViewHolder) v.getTag(); //here is where the class cast exception occurs } if (viewHolder.text != null) viewHolder.text.setText(this._items.get(position).get_description()); v.setTag(this._items.get(position)); ... return v; } 

logcat的: 在此处输入图像描述

view_select_event_item3:

      

在getView中尝试这个,检查convertView对象的类名(View Holder对象),如果它与ViewHolder的类名不匹配(在我的例子中是VisitsListViewHolder) – 将其设置为null,这样就为它创建了新实例查看持有人

 if(convertView != null) { String className = convertView.getTag().getClass().getName(); if(!className.equalsIgnoreCase("VisitsListViewHolder")) { convertView = null; } }