0

で使用ListViewしていCheckBoxます。1つだけCheckBox選択しましたが、を使用して複数の行に自動的に選択されScrollViewます。

サンプルコード(このコードは完全に機能しています)

       holder.checkbox.setOnClickListener( new OnClickListener()
        {
            public void onClick( View v )
            {
                CheckBox cb = ( CheckBox ) v;
                if ( cb.isChecked() )
                {
                    test[position] = true;
                    holder.checkbox.setChecked(test[position]);
                }
                else
                {
                    test[position] = false;
                    holder.checkbox.setChecked(test[position]);
                }
            }
        });
        holder.checkbox.setChecked(test[position]);

しかし、私が使用するとき、setOnItemClickListenerそれは機能していません。

サンプルコード(このコードは私には機能しません)

        listview.setOnItemClickListener( new OnItemClickListener() 
        {
            public void onItemClick( AdapterView<?> parent, final View v, final int position, long id ) 
            {
                holder.checkbox = ( CheckBox ) v.findViewById( R.id.lock_File_CheckBox );
                if ( holder.checkbox.isChecked() )
                {
                    test[position] = false;
                    holder.checkbox.setChecked(test[position]);
                }
                else
                {
                    test[position] = true;
                    holder.checkbox.setChecked(test[position]);
                }
            }
        });
        holder.checkbox.setChecked(test[position]);

私が間違えることができるところ。CheckBoxこの選択を回避するにはどうすればよいですか。

手伝ってくれませんか?

4

4 に答える 4

3

およびonItemClick()を使用して、CheckBoxのインスタンスを内部に取得できます。メソッド内のCheckBoxインスタンスにsetTagを設定できます。setTag()getTag()getView()

convertView.setTag(R.id.check, viewHolder.checkbox);

そして、をonItemClick()使用してインスタンスを内部に取得します。

CheckBox checkbox = (CheckBox) v.getTag(R.id.check);

さらにクエリがある場合は、を確認できますmy blog post

于 2012-07-31T09:59:05.403 に答える
1

onClick を使用しないでください。OnCheckedChange を使用する

holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
            if (isChecked) {
                doSomethingWithCheckedState(compoundButton);
            } else {
                doSomethingWithUnCheckedState(compoundButton);
            }
        }
    });

ICS のスイッチとの互換性のために、CheckBox は CompoundButton を継承することに注意してください。

于 2012-07-31T09:53:28.840 に答える
0

リスト アイテムのフォーカス可能なビューは、リスト アイテムがクリックonListItemClick()されたときに が起動するのを防ぎます。ListActivityしかし、 の効果はonListItemClick()で実現できますOnClickListener。これについて詳しくはこちらをお読みください

于 2012-07-31T10:05:12.540 に答える