ListView条目焦点获取不到问题解决
来源:互联网 发布:flash播放器mac版 编辑:程序博客网 时间:2024/05/16 18:05
项目开发中 ListView 是非常常见的控件,我们在使用ListView的时候往往要展示比较复杂的Item,如果Item中有Button或者CheckBox等会抢夺焦点的控件的时候. 虽然我们设置的onItemClickListener,但是我们点击条目,仍然不会有点击事件,原因就是Button等控件抢夺了Item的焦点.
比如下边的代码 :
<-- MainActivity的布局 --> <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.joker.listviewitemdemo.MainActivity"> <ListView android:id="@+id/lv" android:layout_width="match_parent" android:layout_height="match_parent" /></RelativeLayout>
<-- ListView的条目布局 --><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/tv_item" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <-- 会抢夺Item的焦点控件 --> <Button android:id="@+id/btn1_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button1" /> <Button android:id="@+id/btn2_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button2" /></LinearLayout>
<-- getView中设置了Button的点击事件 --> @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHoler viewHoler = null; if (convertView == null){ convertView = View.inflate(MainActivity.this, R.layout.item, null); viewHoler = new ViewHoler(); viewHoler.mTextView = (TextView) convertView.findViewById(R.id.tv_item); viewHoler.mButton1 = (Button) convertView.findViewById(R.id.btn1_item); viewHoler.mButton2 = (Button) convertView.findViewById(R.id.btn2_item); convertView.setTag(viewHoler); }else { viewHoler = (ViewHoler) convertView.getTag(); } viewHoler.mTextView.setText(objects.get(position)); viewHoler.mButton1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "点击了按钮1....", Toast.LENGTH_SHORT).show(); } }); viewHoler.mButton2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "点击了按钮2....", Toast.LENGTH_SHORT).show(); } }); return convertView; }
// 设置了ListView的条目点击事件mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, "点击了条目", Toast.LENGTH_SHORT).show(); } });
如果仅仅是这样,我们在运行之后发现,2个Button的点击事件是可以触发的,但是Item的事件不会触发.**解决方法:** 1. 在xml中设置Button的android:focusable="false", 这样Button就不会去抢夺焦点了. 2. 在getView()中设置Button不去获取焦点, btn.setFocusable(false). 3. 设置item的根布局的配置android:descendantFocusability="blocksDescendant"三种方式都可以解决ListView条目失去焦点的问题.
1 0
- ListView条目焦点获取不到问题解决
- ListView中的条目获取焦点时更换背景
- ListView无法获取焦点之问题解决
- Android之ListView的item获取不到焦点问题
- Android进阶之Listview/GridView的onItemClick()获取不到焦点
- 安卓TV中Gridview或listview获取不到焦点
- ListViewItem获取不到焦点
- 让获取不到焦点
- ListView 中设置setonitemclicklistener()监听时,无法获取item条目的点击事件焦点
- popupWindow不获取焦点ListView获取焦点
- iOS10 IDFA 获取不到问题解决
- edittext焦点自动获取问题解决
- listview条目上有checkbox抢焦点的处理办法
- RelativeLayout中Button为啥获取不到焦点
- KindEditor 获取不到内容 失去焦点
- ListView中EditText焦点获取
- android listView EditText获取焦点
- listView嵌套button失去焦点问题解决
- DroidPlugin源码分析安装和卸载
- Nginx HTTP负载均衡示例
- 15、Spring Boot使用Druid和监控配置【从零开始学Spring Boot】
- 汉诺塔
- iOS-环信SDK讲解
- ListView条目焦点获取不到问题解决
- 16. Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】
- 实现web数据同步的四种方式
- IOS学习之蓝牙4.0
- mysql 第五天
- Cannot create PoolableConnectionFactory (Communications link failure due to underlying exception 解决
- (4)HTML的全局事件属性
- PAT甲级.1001. A+B Format (20)
- 自定义UITableView每组头部控件