0

テキストビューをクリックすると、その特定の行の非表示のレイアウトが展開され、チェックボックスをクリックすると、その特定の行が削除対象として選択されます。ビューをCheckBox のクラス オブジェクトClasCcastExceptionにタグ付けすると、これが得られます。ここに私のコードがあります、ViewHolderholderOnCheckedChangeListener

CustomListView.class

public View getView(final int position, View convertView, ViewGroup parent) {
    holder = null;
    DataFields rowItems = (DataFields) getItem(position);

    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.home_field_row, null);

        holder = new ViewHolder();
        holder.dataFields = items.get(position);
        holder.mName = (TextView) convertView
                .findViewById(R.id.hmFieldName);
        holder.mDeleteCheck = (CheckBox) convertView
                .findViewById(R.id.deleteCheck);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.mDeleteCheck.setTag(position);
    holder.mName.setTag(position);

    holder.mName.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

                holder = (ViewHolder) ((View) v.getParent()).getTag(); //Works fine here
                ...
        }
    });

    holder.mDeleteCheck
            .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {

                    holder = (ViewHolder) ((View) buttonView.getParent()).getTag(); //throwing ClassCastException
                    ...
                }
            });

    holder.mName.setText(rowItems.getName());
    holder.mDeleteCheck.setChecked(deletePositions[position]);

    return convertView;
}

私の質問が明確であることを願っています。どんな種類の助けや提案も大歓迎です。ありがとう !

編集

ログキャット -

03-09 12:08:45.789: E/AndroidRuntime(3661): FATAL EXCEPTION: main
03-09 12:08:45.789: E/AndroidRuntime(3661): java.lang.ClassCastException: java.lang.Integer
03-09 12:08:45.789: E/AndroidRuntime(3661):     at com.inkers.forgetpassword.utility.CustomListArrayAdapter$1.onCheckedChanged(CustomListArrayAdapter.java:173)
03-09 12:08:45.789: E/AndroidRuntime(3661):     at android.widget.CompoundButton.setChecked(CompoundButton.java:124)
03-09 12:08:45.789: E/AndroidRuntime(3661):     at android.widget.CompoundButton.toggle(CompoundButton.java:86)
03-09 12:08:45.789: E/AndroidRuntime(3661):     at android.widget.CompoundButton.performClick(CompoundButton.java:98)
4

3 に答える 3

2

あなたのレイアウトxmlファイルを見なければ、私は推測することしかできませんが、TextViewのように、チェックボックスはルートビュー(行ビューグループ)の直接の子ではないようです。

最初に: この階層を確認してください: チェックボックスとルートビューグループの間に別の ViewGroup がありますか? (checkbox.getParent が指し、classcastException を引き起こすもの)

2番目:このコードを単純化することを検討する必要があります。達成しようとしていることは少し複雑に思えます...

3 番目: より適切な回答が必要な場合は、lawout xml ファイルを表示してください ;)

于 2013-03-09T08:41:52.617 に答える
0

buttonView とは何ですか?その親に ViewHolder のインスタンスであるタグがあると思いますか? 2 番目のポイントは、ViewHolder holder = null を使用することです。これにより、OnClickListeners で間違ったホルダーを使用するのを防ぐことができます。

于 2013-03-09T08:12:28.003 に答える
0

ボタンビューの親には、ビュー ホルダーのタグが含まれていません。タグはリスト項目に含まれています。アイテムクリックリスナーでタグを取得します。

チェックボックスをクリックして表示したいビューの setVisibility(View.GONE) を使用できます。

ボタンビューの親の場合、可視性のオン/オフに使用するビューを取得できます。

于 2013-03-09T08:28:03.840 に答える