[英]Android: enable second checkbox only if first is selected
我正在使用自定义阵列适配器,并且在同一行上有两个复选框。 仅在选中第一个时,才应启用第二个。 我看不到如何从第一个列表框的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
}
});
假设您有两个复选框,分别为checkBoxFirst和checkBoxSecond。
checkBoxFirst.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxSecond.setEnabled(isChecked);
}
});
希望它能对您有所帮助:)
尝试这个
//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);
}
}
});
使用以下方法更改getView方法:
@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);
// set initial status of checkbox inversion
holder.inversion.setEnabled(cb.isChecked());
// get final reference, used in onclick listener
final CheckBox other=holder.inversion;
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());
// handle of inversion checkbox to enable/disable it
other.setEnabled(cb.isChecked());
}
});
}
}
我只是为第二个复选框添加初始化代码,并且在侦听器中使用最终引用来管理复选框状态。
好的,我知道了:
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);
}
});
感谢您的所有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.