ListView同时响应itemclick事件和item控件的onClickListener时间的解决办法

来源:互联网 发布:java怎么输入数组 编辑:程序博客网 时间:2024/05/16 06:37

listview可以根据自己的需求,重写baseadapter ,实现自己的布局及数据,但是当我们在自己的布局中加入了button或者ImageButton,还有其他比如checkbox,radiobutton等控件时,发现listview不在响应onitemclick事件,这是因为buton等控件优先获得focus,也就是说listview的item根本就获取不到focus,所以导致onitemclick时间不能触发。


一、

如果listview item里只有一个buton类似的控件,我以前以下的方法处理冲突问题,最后用listView.setOnClickListener实现点击后跳转页面、弹出对话框等功能。


 <Button             android:layout_width="wrap_content"            android:layout_height="wrap_content"           <span style="color:#FF0000;"> android:focusable="false"            android:focusableInTouchMode="false"            android:clickable="false"</span>/>

二、如果listview item里有2个或者更多的button类似控件,用这些控件实现不同的功能,这时就在自定义的adapter里实现对应的功能,并且也不对button设置上面的属性控制。

<span style="font-size:18px;">public View getView(final int position, View convertView, ViewGroup parent) {View view =null;ViewHolder holder =null;if(convertView == null){holder = new ViewHolder();view = View.inflate(context, R.layout.score_personal_lv_item, null);holder.btn_delete =(Button) view.findViewById(R.id.btn_delete);holder.btn_update =(Button) view.findViewById(R.id.btn_update);view.setTag(holder);}else{view = convertView;holder = (ViewHolder) convertView.getTag();}holder.btn_delete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {deleteScore(position);}});holder.btn_update.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {updateScore(position);}});return view;}</span>

三、最近我遇到一个新的需求:listview点击后跳转至新页面,点击item的button要删除数据。这个需求上面的两种方法都不能实现,我查找了资料,才知道有新的解决办法。


注意:在<RelativeLayout>中android:descendantFocusability="blocksDescendants"和button中的android:focusable="false"两个属性设置必须要用。如果不设置,将导致ListView的ItemClick事件将无法触发,该事件被Button的click事件屏蔽了。


<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:descendantFocusability="blocksDescendants"        android:orientation="horizontal" >        <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"            android:text="你好吗?"            android:id="@+id/text"            />        <Button android:id="@+id/button"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentRight="true"            android:focusable="false"            android:text="确定"            />    </RelativeLayout></span>


最后在activity或者fragment里设置listView.setOnClickListener事件,在继承baseadapter的自定义adapter里设置button.setOnClickListener事件。


0 0
原创粉丝点击