0

listView/List アイテムにチェックボックスがあるため、リストをスクロールするとチェックボックスがオンまたはオフになるという問題があります。したがって、たとえば ArrayList でチェックされたアイテムを追跡する必要があります。そのため、各チェックボックスに OnCheckedChangeListener を追加し、リストビューのカスタム アダプターから「getView」にリスナーを追加しました。

すべてのチェックボックスがクリックに反応するため、次の問題があります。

@Override
public View getView(int position, View convertView, ViewGroup parent) {    
...
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) {
                if (!MainActivity.getSharedInstance().getIsCheckedArray().contains(tasks.get(MainActivity.ID)))
                    MainActivity.getSharedInstance().getIsCheckedArray().add(tasks.get(MainActivity.ID));
                for (String i : MainActivity.getSharedInstance().getIsCheckedArray()) {
                    Log.i("RUN", i);
                }
            } else {
                if (MainActivity.getSharedInstance().getIsCheckedArray().contains(tasks.get(MainActivity.ID)))
                    MainActivity.getSharedInstance().getIsCheckedArray().remove(tasks.get(MainActivity.ID));
                for (String i : MainActivity.getSharedInstance().getIsCheckedArray()) {
                    Log.i("RUN", i);
                }
            }
        }
    });

各リスト アイテムから独自の ID を取得し、その ID を持つアイテムにアクセスできます。しかし、チェックボックスをクリックして ID を取得すると、1 つのアイテム (最後のアイテム) の ID しか取得できません。他のチェックボックスをクリックすると、変更に反応しますが、最後のアイテムの前のアイテムからではなく、最後のアイテムからのみ ID を取得します。

常に新しいリスナーを作成する場合、リスナーを上書きしますか?

更新: 気にしないで、これを onCheckChangeListener に追加しました

String curIndex = tasks.get(MainActivity.ID);

そしてそれは働いた

4

1 に答える 1

0

あなたの間違いは、LayoutInflater を使用していないことだと思います。ちょうど試して:

    LayoutInflater inflater =  (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.yourListViewItemLayout, parent,false);

    final Checkbox yourCheckBox = (CheckBox)view.findViewById(R.id.yourCheckBoxId);
             yourCheckBox.setOnCheckedChangeListener......

これはうまくいくはずです

于 2013-01-03T19:18:54.597 に答える