我正在使用一个自定义数组适配器,并在同一行中有两个复选框。只有在选中第一个选项时,才应该启用第二个选项。我不知道如何从第一个列表的onClickListener获得第二个列表框的句柄。
private class MyCustomAdapter extends ArrayAdapter<DiatonicMajorKey> {
private ArrayList<DiatonicMajorKey> keyList;
public MyCustomAdapter(Context context, int textViewResourceId,
ArrayList<DiatonicMajorKey> keyList) {
super(context, textViewResourceId, keyList);
this.keyList = new ArrayList<DiatonicMajorKey>();
this.keyList.addAll(keyList);
}
// this class holds the items that actually appear on the screen.
private class ViewHolder {
TextView code;
CheckBox key;
CheckBox inversion;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.key_info, null);
holder = new ViewHolder();
holder.code = (TextView) convertView.findViewById(R.id.keycode);
holder.key = (CheckBox) convertView.findViewById(R.id.checkBox1);
holder.inversion = (CheckBox) convertView.findViewById(R.id.checkBox2);
convertView.setTag(holder);
holder.key.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
DiatonicMajorKey _key = (DiatonicMajorKey) cb.getTag();
_key.setKeySelected(cb.isChecked());
// how to get handle of inversion checkbox to enable/disable it
}
});发布于 2016-06-15 14:12:09
好的,明白了:
final CheckBox other=holder.inversion;
convertView.setTag(holder);
holder.inversion.setEnabled(false);
// set checkchanged listener to your first checkbox
holder.key.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//enable if the first checkbox is checked/ticked
other.setEnabled(true);
}
}
});
holder.key.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
DiatonicMajorKey _key = (DiatonicMajorKey) cb.getTag();
_key.setKeySelected(cb.isChecked());
// handle of inversion checkbox to enable/disable it
other.setEnabled(cb.isChecked());
other.setChecked(false);
}
});谢谢你的帮助!
发布于 2016-06-15 13:21:00
假设您有两个名为checkBoxFirst和checkBoxSecond的复选框。
checkBoxFirst.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxSecond.setEnabled(isChecked);
}
});希望它能帮助你:)
发布于 2016-06-15 13:21:33
尝尝这个
//initialize the second checkbox and set enabled to false
holder.inversion.setEnabled(false);
// set checkchanged listener to your first checkbox
holder.key.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//enable if the first checkbox is checked/ticked
holder.inversion.setEnabled(true);
}
}
});https://stackoverflow.com/questions/37836559
复制相似问题