簡體   English   中英

高效的適配器具有java.lang.ClassCastException嗎?

[英]Efficient adapter has java.lang.ClassCastException?

看完這里之后我嘗試實現自己的高效適配器,

我的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):關閉VM W / dalvikvm(748):threadid = 1:線程退出且未捕獲異常(group = 0x412a4300)E / AndroidRuntime(748):FATAL EXCEPTION: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();

您的代碼嘗試將Integer轉換為ViewHolder並引發java.lang.ClassCastException。

如果我沒記錯,這就是“ linear_container”布局的結構

<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);

應該一樣。

您正在設置一個int而不是view:

llCustomImgViewContainer.setTag(viewPosition);

使用setTag時,將給定對象(viewPosition)保存在調用對象(llCustomImgViewContainer)中。

刪除最后一行:

llCustomImgViewContainer.setTag(viewPosition);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM