Android List item中EditText 第一次点击无效,第二次点击响应事件监听的解决
先说结构,我是在RecyclerView套入了EditText
这是Item结构:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="150dp"
android:layout_height="40dp"
tools:context=".FileActivity"
android:orientation="horizontal"
android:id="@+id/item_view">
<LinearLayout
android:layout_width="match_parent"
android:layout_weight="3"
android:layout_height="match_parent">
<TextView
android:id="@+id/data_number"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/xui_btn_gray_select_color"
android:gravity="center"
android:textColor="@color/xui_config_color_white"
android:textSize="20dp"
android:textStyle="bold"/>
</LinearLayout>
<LinearLayout
android:id="@+id/edit_view"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/data_edit"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@null"
android:focusableInTouchMode="false"
android:cursorVisible="true"
android:inputType="numberDecimal"/>
<TextView
android:id="@+id/qr_data_id"
android:layout_width="0dp"
android:layout_height="0dp" />
</LinearLayout>
</LinearLayout>
根据需要,edit要使用横向的数字键盘输入数字内容。于是就必须使用自定义键盘输入。
实际测试中发现,当我第一次点击edit时不会触发item子view点击事件,导致不能给自定义键盘设置到参数,就不能输入数字,当第二次点击时才会触发点击事件。一开始是想会不会是我用这一句,
getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); //不弹出输入法
不让系统键盘弹出来,导致系统键盘只是隐藏第一次点击事件被系统键盘消费了。
后来发现并不是,最终原因是在item的EditText中设置了
android:focusableInTouchMode="false"
这个属性,意思是“是不是需要点击来获取焦点”,我设置为了true,因此第一次点击只是获取到焦点,然后才触发事件。小小一句坑了我两天时间,下次得注意啊!
最后给安利一下开源的RecyclerView的Adapter项目BaseRecyclerViewAdapterHelper很好用,推荐给大家。