列表项中包含按钮的ListView的点击事件的响应
2015-09-15 15:36
531 查看
ListView列表项中可以存在按钮,例如如下图所示。
清单文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="lemon.learnandroid" android:versionCode="1" android:versionName="1.0"> <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"> <activity android:name="ListViewActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
每一项的布局文件(
button_listview_item.xml):
<?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="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示该项内容"/> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
代码:
package lemon.learnandroid; import android.app.ListActivity; import android.os.Bundle; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.view.LayoutInflater; import android.widget.LinearLayout; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import android.widget.Button; import android.util.Log; public class ListViewActivity extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String[] myStringArray = {"第一件事","第二件事","第三件事"}; ThingArrayAdapter adapter = new ThingArrayAdapter(this, R.layout.button_listview_item, myStringArray); ListView listView = getListView(); listView.setAdapter(adapter); } private class ThingArrayAdapter extends ArrayAdapter<String> { private int resourceId; public ThingArrayAdapter(Context context, int resourceId, String[] things) { super(context, resourceId, things); this.resourceId = resourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { final String content = getItem(position); LinearLayout linearLayout = new LinearLayout(getContext()); LayoutInflater layoutInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); layoutInflater.inflate(resourceId, linearLayout, true); final TextView tvName = (TextView)linearLayout.findViewById(R.id.textview); tvName.setText(content); Button btn = (Button)linearLayout.findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(ListViewActivity.this,content,Toast.LENGTH_SHORT).show(); } }); return linearLayout; } } }
点击按钮会弹出相应列表项的内容,而点击列表项没有反应。这是因为
ListView的
ItemClick事件被按钮的
Click事件给屏蔽了。
为了解决这个问题,需要对每一项的布局文件进行修改,为顶层的
LinearLayout或
RelativeLayout设置属性
android:descendantFocusability="blocksDescendants",为按钮设置属性
android:focusable="false",修改后的布局文件如下:
<?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="wrap_content" android:orientation="horizontal" android:descendantFocusability="blocksDescendants"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示该项内容" android:focusable="false"/> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
这时ItemClick事件也可以正常响应了。
参考文献
/article/9256766.html相关文章推荐
- 第一支小爬虫
- 数据结构之——归并排序
- 每日学习心得:$.extend()方法和(function($){...})(jQuery)详解
- Badboy录制
- JS实现带有抽屉效果的产品类网站多级导航菜单代码
- jQuery焦点图切换特效代码分享
- 【投稿】iOS蓝牙开发(一)蓝牙相关基础知识
- mysql语句与sql语句的部分对比
- SQLite数据库框架ORMLite与GreenDao的简单比较
- IT
- oracle v$database 视图
- java apache commons HttpClient发送get和post请求的学习整理
- 《三体》轻读梳理
- 在线捉鬼游戏开发之三 - 代码与测试(玩家投票)
- hdu2609最小表示法
- 黑马程序员学习(四) 代码块、this、static
- SyntaxError: Non-ASCII character '\xe5'
- PHP接收客户端数据方式:post,HTTP_RAW_POST_DATA,input
- 网络请求框架---Volley
- (一)设计模式之单例模式