问题描述: 在ListView中,点击EditText获得焦点时,会重新调用getView,此时EditText会失去焦点。
方案:
定义一个全局的mCurrentIndex,记录刷新前是哪一项被点击量。给EdtiText设置onTouchListener,在这里设置mCurrentIndex的值。然后在
getView里面进行判断,如果是之前的选中项,设置它的焦点。看代码
1 // 定义变量,记录刷新前获得焦点的EditText所在的位置 2 int mCurrentTouchedIndex = -1; 3 4 // 在getView中进行判断 5 public View getView(int position, View convertView, Viewgroup parent) { 6 ... 7 // 设置触摸事件(别想着用OnClickListener) 8 focusEt.setOnTouchListener(new OnEditTextTouched(position)); 9 focusEt.clearFocus(); 10 if (position == mCurrentTouchedIndex) { 11 // 如果该项中的EditText是要获取焦点的 12 focusEt.requestFocus(); 13 } 14 return convertView; 15 } 16 17 // ListView中EditText的触摸事件 18 private class OnEditTextTouched implement OnTouchListener { 19 private int position; 20 21 public OnEditTextTouched(int position) { 22 this.position = position; 23 } 24 25 @override 26 public boolean onTouch(View v, MotionEvent event) { 27 if (event.getAction() == MotionEvent.ACTION_UP) { 28 mCurrentTouchedIndex = position; 29 } 30 return false; 31 } 32 }