1、CheckBox状态保存
//保存item位置
final int listTag = position;
//checkBox点击保存状态
holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
// TODO Auto-generated method stub
if(arg1){
mData.get(listTag).setSelected(true);
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>mData.get(listTag).setSelected(false);
<span style="white-space:pre"> </span>}
}
});
2、监听EditText内容变化并保存
holder.editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
mData.get(listTag).setOriginal(arg0.toString());
}
});
3、EditText或CheckBox无法获取焦点,在item布局最外层加下面代码
android:descendantFocusability="blocksDescendants"
4、还有一个奇葩的问题,点击EditText后弹出输入法,但是没有获取到焦点,第二次点击才好用。
private int index = -1;
//记录点击的TextView
holder.editText.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View view, MotionEvent event) {
// 在TOUCH的UP事件中,要保存当前的行下标,因为弹出软键盘后,整个画面会被重画
// 在getView方法的最后,要根据index和当前的行下标手动为EditText设置焦点
if(event.getAction() == MotionEvent.ACTION_UP) {
index= listTag;
}
return false;
}
});
//getView方法最后为EditText添加焦点
editText.clearFocus();
if(index!= -1 && index == position) {
// 如果当前的行下标和点击事件中保存的index一致,手动为EditText设置焦点。
editText.requestFocus();
}