-1

各 ListItem がそのレイアウトに CheckBox を保持する ListView があります。ListItems がクリックされたときに CheckBoxes がアクティブになるようにします。問題は、ListItem をクリックするたびに、CheckBoxes がランダムにアクティブになることです。例: ListItem1 をクリックすると、ListItem4 の CheckBox がアクティブになります。等々。どうすればこれを防ぐことができますか? ここに私のOnItemClickListenerがあります:

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.listitem, R.id.listcontent, valueslist);

lv = (ListView) findViewById(R.id.list);
lv.setAdapter(arrayAdapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckBox cb = (CheckBox) findViewById(R.id.cb); 
if (cb.isChecked() == false) {
cb.setChecked(true); 
} else {
cb.setChecked(false); 
}
}
}); 
4

1 に答える 1

1

これの代わりに

CheckBox cb = (CheckBox) findViewById(R.id.cb); 

あなたが使用する必要があります

CheckBox cb = (CheckBox) view.findViewById(R.id.cb); 

編集:以下のようなクラスを宣言してから、ArrayAdapterの代わりにCArrayAdapterを使用します。試してみる。うまくいくかもしれない

これを使って

   private class CArrayAdapter extends ArrayAdapter<String>{

    public CArrayAdapter(Context context, int resource,
            int textViewResourceId, String[] objects) {
        super(context, resource, textViewResourceId, objects);

    }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view =  super.getView(position, convertView, parent);

    CheckBox cb =(CheckBox)findViewById(R.id.cb);
    cb.setChecked(false);
    return view;

}

}
于 2012-08-20T19:37:52.723 に答える