ListView中弹出软键盘时,EditText失去焦点的问题

本文介绍了一种解决ListView中EditText点击获得焦点后,因ListView重新调用getView导致焦点丢失的问题。通过定义全局变量mCurrentIndex记录刷新前获得焦点的EditText位置,并在getView中进行判断,确保焦点不会丢失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述: 在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 }

 

转载于:https://www.cnblogs.com/ivan-aldrich/p/4244295.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值