在观看了here之后,我尝试实现自己的高效适配器,
我的Viewholder类几乎相同:

static class ViewHolder {
        ImageButton button;
        TextView txtView;
    }

getview方法如下:
private void getView(...) {

    if(convertView == null) {
        convertView = LayoutInflater.from(
                parent.getContext()).inflate(R.layout.linear_container,
                        parent, false);

        holder = new ViewHolder();
        convertView.setTag(holder);
    } else {
        // erro line
        holder = (ViewHolder) convertView.getTag();
    }

    LinearLayout llCustomImgViewContainer = (LinearLayout) convertView
            .findViewById(R.id.llContainer);
    llCustomImgViewContainer.setTag(viewPosition);

    return converView;
}

但一旦有新的观点出现,我就错了
D/AndroidRuntime(748):关闭虚拟机
w/dalvikvm(748):threadid=1:线程未捕获异常而退出(group=0x412a4300)
e/androidruntime(748):致命异常:main
e/androidruntime(748):java.lang.classcastexception:java.lang.integer不能转换为com.droid.test.widget.customListView$customBaseAdapter$viewHolder
有人知道这里出了什么事吗?

最佳答案

似乎一开始

convertView.setTag(holder);

您正在设置与此视图关联但稍后使用的标记(它是holder)
llCustomImgViewContainer.setTag(viewPosition);

您正在将ViewPosition设置为标记。然后可能在
holder = (ViewHolder) convertView.getTag();

您的代码试图将整数强制转换为viewholder并抛出java.lang.ClassCastException。
如果我没有错,这是“线性容器”布局的结构
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/llContainer">

    <!-- some views -->

</LinearLayout>

从返回的视图
LayoutInflater.from(parent.getContext()).inflate(R.layout.linear_container,parent,false);


convertView.findViewById(R.id.llContainer);

应该是一样的。

10-08 17:23