我正在使用自定义数组适配器并在同一行上有两个复选框。只有在检查第一个时才应启用第二个。我没有看到如何从第一个列表框的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
}
});
答案 0 :(得分:1)
假设您有两个名为checkBoxFirst和checkBoxSecond的复选框。
checkBoxFirst.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkBoxSecond.setEnabled(isChecked);
}
});
希望它会对你有所帮助:)。
答案 1 :(得分:0)
试试这个
//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);
}
}
});
答案 2 :(得分:0)
使用以下命令更改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());
}
});
}
}
我只是为第二个复选框添加初始化代码,我在监听器中使用最终引用来管理复选框状态。
答案 3 :(得分:0)
好的,明白了:
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);
}
});
感谢您的帮助!