0

私はAndroidが初めてです。チェックボックスでキーと対応する値(チェック/チェックなし)を取得するのを手伝ってください。

チェックボックスには複数のチェック項目がある場合があります。ユーザーがチェックボックスで「チェック」したすべてのアイテムを取得する必要があります。「onCheckedChanged」で次のコードを使用しています。

viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

    @Override
    public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
        Model element = (Model) viewHolder.checkbox.getTag();
        //String temp = viewHolder.checkbox.getText().toString(); //didn't give me the key
        //Log.d(TAG, temp);
        //String temp = buttonView.getText().toString(); //didn't give me the key
        element.setSelected(buttonView.isChecked());
    }
});
4

3 に答える 3

0

buttonView パラメータで状態を変更したコントロールが渡されます。findViewByiD() を使用して onCreate のコントロールへのポインターを保存し、onCheckedChange のポインターと比較してみませんか?

于 2012-08-18T20:09:23.750 に答える
0

申し訳ありませんが、解決策が得られませんでした。チェックボックスを表示するためにarrayAdapterを使用しています。以下は、「setOnCheckedChangeListener」を処理する arrayAdapter のコードです。

public class InteractiveArrayAdapter extends ArrayAdapter {

private final List<Model> list;
private final Activity context;
private static final String TAG = "InteractiveArrayAdapter";

public InteractiveArrayAdapter(Activity context, List<Model> list) {
    super(context, R.layout.rowbuttonlayout, list);
    this.context = context;
    this.list = list;
}

static class ViewHolder {
    protected TextView text;
    protected CheckBox checkbox;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;
    if (convertView == null) {
        LayoutInflater inflator = context.getLayoutInflater();
        view = inflator.inflate(R.layout.rowbuttonlayout, null);
        final ViewHolder viewHolder = new ViewHolder();
        viewHolder.text = (TextView) view.findViewById(R.id.label);
        viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
        viewHolder.checkbox
                .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,
                            boolean isChecked) {
                        Model element = (Model) viewHolder.checkbox.getTag();
                        //String temp = viewHolder.checkbox.getText().toString();
                        //Log.d(TAG, temp);
                        //String temp = buttonView.getText().toString();
                        element.setSelected(buttonView.isChecked());

                    }
                });
        view.setTag(viewHolder);
        viewHolder.checkbox.setTag(list.get(position));
    } else {

        view = convertView;
        ((ViewHolder) view.getTag()).checkbox.setTag(list.get(position));
    }

    ViewHolder holder = (ViewHolder) view.getTag();
    holder.text.setText(list.get(position).getName());
    holder.checkbox.setChecked(list.get(position).isSelected());
    return view;
}

}

于 2012-08-19T04:05:57.163 に答える
0

私があなたの質問を理解した場合、リスト内のすべてのチェックボックスを追跡する方法を探していましたか? もしそうなら、次のようなことを試してください

private ArrayList<boolean> checkedList = new ArrayList<boolean>();

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
    LayoutInflater inflator = context.getLayoutInflater();
    convertView = inflator.inflate(R.layout.rowbuttonlayout, null);
    final ViewHolder viewHolder = new ViewHolder();
    viewHolder.text = (TextView) view.findViewById(R.id.label);
    viewHolder.checkbox = (CheckBox) view.findViewById(R.id.check);
    convertView.setTag(viewHolder);
} else {
    viewHolder = (ViewHolder) convertView.getTag();
}

viewHolder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
{
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
       if (isChecked && !checkedList.contains(list.getPosition()))
          checkedList.add(list.getPosition());
       else if (!isChecked && checkedList.contains(list.getPosition()))   
          //TODO search and remove list item here
    }
});

return convertView;

}

于 2012-08-27T23:33:02.603 に答える