2

ここを見た後、私は独自の効率的なアダプターを実装しようとしましたが、

私の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 にキャストできません

ここで何が間違っているのか誰にも分かりますか?

4

2 に答える 2

6

最初は

convertView.setTag(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);

同じはずです。

于 2013-08-22T13:59:16.630 に答える
0

view の代わりに int を設定しています:

llCustomImgViewContainer.setTag(viewPosition);

setTag を使用する場合、指定されたオブジェクト (viewPosition) を呼び出しオブジェクト (llCustomImgViewContainer) に保存します。

最後の行を削除します:

llCustomImgViewContainer.setTag(viewPosition);
于 2013-08-22T13:59:33.270 に答える