最近开发一个问卷的单选题,需要选中选项后,才能编辑后边的EditText。
由于选项不固定,所有的选项都是动态生成的,只能在代码中控制EditText是否可选。
首先将RadioButton和对应的EditText,使用HashMap进行映射:
private Map<Integer, EditText> mRadioButton2EditTextMap;
private Map<Integer, EditText> getRadioButton2EditTextMap() {
if (null == mRadioButton2EditTextMap) {
mRadioButton2EditTextMap = new HashMap<Integer, EditText>();
}
return mRadioButton2EditTextMap;
}
在生成EditText时候,调用:
getRadioButton2EditTextMap().put(radioResId, et);
对于RadioGroup,设置setOnCheckedChangeListener。
问题来了,当没有选中radioButton的时候,遍历map,调用所有EditText的:
setFocusable(false);
选中一个RadioButton时,调用:
setFocusable(true);
却不能编辑输入框。
解决办法:
对于需要编辑的EditText,只设置setFocosable是不够的,需要:
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.requestFocus();