ExpandableListView+RadioButton+EditText问题:解决方法稍微不同于ListView+RadioButton+EditText,首先,需要一个list来保存RadioButton的值;然后,对于RadioButton要设置onClickListener方法,来更改list中保存的值,而不能用onCheckedChangeListener。
对于和EditText复用的情况,首先你需要去掉ViewHolder,即ExpandableListview的优化,然后可以在EditText的onTouchListener中监听,当触摸了EditText就允许EditText的addTextChangedListener赋值,否则不允许。
1、现象描述
当ListView的item中包含EditText时,你会发现EditText的值会随着ListView的滚动而乱跑。
2、解决方案
1)你需要去掉ListView的优化。很重要,不信试试。
2)你需要判断下当EditText的值变化时,是不是由于setText()调用引起的.
public class Adapter extends BaseAdapter{
/*
* 保存EditText的值
*/
private Map<Integer, String> map = new HashMap<Integer, String>();
/*
* 判断是否由于调用setText()而引起EditText的值变化
*/
private boolean isSetText = false;
@Override
public int getCount() {
return 20;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final EditText et;
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_et, null);
et = (EditText) convertView.findViewById(R.id.et);
class MyTextWatcher implements TextWatcher{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
//如果由于调用setText()而执行此方法,则不给map设置。
if(isSetText){
isSetText =false;
return;
}
map.put(position, s.toString());
System.out.println("---"+s.toString()+"---pos:"+et.getTag());
}
}
et.addTextChangedListener(new MyTextWatcher());
if(map.get(position) != null){
System.out.println("--------"+position);
isSetText = true;
et.setText(map.get(position));
}
return convertView;
}
}