1.先看下效果图:

      

在这里仅供测试,我把数据都写死了,根据需要可以自己进行修改,此外实现ListView上面每个Item上的Button的事件有两种方法:

1.使用final变量扩展局部变量的生命周期范围主要代码(本文最后附全部代码):

[java] view plaincopy
  1. //注意原本getView方法中的int position变量是非final的,现在改为final
  2. @Override
  3. public View getView(final int position, View convertView, ViewGroup parent) {
  4. ViewHolder holder = null;
  5. if (convertView == null) {
  6. holder=new ViewHolder();
  7. //可以理解为从vlist获取view  之后把view返回给ListView
  8. convertView = mInflater.inflate(R.layout.vlist, null);
  9. holder.title = (TextView)convertView.findViewById(R.id.title);
  10. holder.info = (TextView)convertView.findViewById(R.id.info);
  11. holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
  12. convertView.setTag(holder);
  13. }else {
  14. holder = (ViewHolder)convertView.getTag();
  15. }
  16. holder.title.setText((String)mData.get(position).get("title"));
  17. holder.info.setText((String)mData.get(position).get("info"));
  18. holder.viewBtn.setTag(position);
  19. //给Button添加单击事件  添加Button之后ListView将失去焦点  需要的直接把Button的焦点去掉
  20. holder.viewBtn.setOnClickListener(new View.OnClickListener() {
  21. @Override
  22. public void onClick(View v) {
  23. showInfo(position);
  24. }
  25. });
  26. //holder.viewBtn.setOnClickListener(MyListener(position));
  27. return convertView;
  28. }
  29. }
  30. //提取出来方便点
  31. public final class ViewHolder {
  32. public TextView title;
  33. public TextView info;
  34. public Button viewBtn;
  35. }
  36. public void showInfo(int position){
  37. ImageView img=new ImageView(ListViewActivity.this);
  38. img.setImageResource(R.drawable.b);
  39. new AlertDialog.Builder(this).setView(img)
  40. .setTitle("详情"+position)
  41. .setMessage("菜名:"+title[position]+"   价格:"+info[position])
  42. .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  43. @Override
  44. public void onClick(DialogInterface dialog, int which) {
  45. }
  46. })
  47. .show();
  48. }

2.使用类记录每个Button的位置,使每个BUTTON都有自己的Listener主要代码:

[java] view plaincopy
  1. //****************************************第二种方法,高手一般都用此种方法,具体原因,我还不清楚,有待研究
  2. public View getView(int position, View convertView, ViewGroup parent) {
  3. ViewHolder holder = null;
  4. MyListener myListener=null;
  5. if (convertView == null) {
  6. holder=new ViewHolder();
  7. //可以理解为从vlist获取view  之后把view返回给ListView
  8. myListener=new MyListener(position);
  9. convertView = mInflater.inflate(R.layout.vlist, null);
  10. holder.title = (TextView)convertView.findViewById(R.id.title);
  11. holder.info = (TextView)convertView.findViewById(R.id.info);
  12. holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
  13. convertView.setTag(holder);
  14. }else {
  15. holder = (ViewHolder)convertView.getTag();
  16. }
  17. holder.title.setText((String)mData.get(position).get("title"));
  18. holder.info.setText((String)mData.get(position).get("info"));
  19. holder.viewBtn.setTag(position);
  20. //给Button添加单击事件  添加Button之后ListView将失去焦点  需要的直接把Button的焦点去掉
  21. holder.viewBtn.setOnClickListener( myListener);
  22. //holder.viewBtn.setOnClickListener(MyListener(position));
  23. return convertView;
  24. }
  25. }
  26. private class MyListener implements OnClickListener{
  27. int mPosition;
  28. public MyListener(int inPosition){
  29. mPosition= inPosition;
  30. }
  31. @Override
  32. public void onClick(View v) {
  33. // TODO Auto-generated method stub
  34. Toast.makeText(ListViewActivity.this, title[mPosition], Toast.LENGTH_SHORT).show();
  35. }
  36. }
  37. //提取出来方便点
  38. public final class ViewHolder {
  39. public TextView title;
  40. public TextView info;
  41. public Button viewBtn;
  42. }

3.全部代码

1.ListViewActivity.java全部代码:

[java] view plaincopy
  1. package ms.ListView;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import android.app.Activity;
  7. import android.app.AlertDialog;
  8. import android.content.Context;
  9. import android.content.DialogInterface;
  10. import android.os.Bundle;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.View.OnClickListener;
  14. import android.view.ViewGroup;
  15. import android.widget.AdapterView;
  16. import android.widget.AdapterView.OnItemSelectedListener;
  17. import android.widget.BaseAdapter;
  18. import android.widget.Button;
  19. import android.widget.ImageView;
  20. import android.widget.ListView;
  21. import android.widget.TextView;
  22. import android.widget.Toast;
  23. public class ListViewActivity extends Activity {
  24. /** Called when the activity is first created. */
  25. private List<Map<String, Object>> mData;
  26. private int flag;
  27. public static String title[]=new String[]{"菜名0","菜名1","菜名2","菜名3","菜名4","菜名5","菜名6","菜名7","菜名8","菜名9"};
  28. public static String info[]=new String[]{ "¥:28","¥:28","¥:28","¥:28","¥:28","¥:28","¥:28","¥:28","¥:28","¥:28",};
  29. @Override
  30. public void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.main);
  33. mData = getData();
  34. ListView listView = (ListView) findViewById(R.id.listView);
  35. MyAdapter adapter = new MyAdapter(this);
  36. listView.setAdapter(adapter);
  37. }
  38. //获取动态数组数据  可以由其他地方传来(json等)
  39. private List<Map<String, Object>> getData() {
  40. List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
  41. for(int i=0;i<title.length;i++){
  42. Map<String, Object> map = new HashMap<String, Object>();
  43. map.put("title", title[i]);
  44. map.put("info", info[i]);
  45. list.add(map);
  46. }
  47. return list;
  48. }
  49. public class MyAdapter extends BaseAdapter {
  50. private LayoutInflater mInflater;
  51. public MyAdapter(Context context) {
  52. this.mInflater = LayoutInflater.from(context);
  53. }
  54. @Override
  55. public int getCount() {
  56. // TODO Auto-generated method stub
  57. return mData.size();
  58. }
  59. @Override
  60. public Object getItem(int position) {
  61. // TODO Auto-generated method stub
  62. return null;
  63. }
  64. @Override
  65. public long getItemId(int position) {
  66. // TODO Auto-generated method stub
  67. return 0;
  68. }
  69. //****************************************final方法
  70. //注意原本getView方法中的int position变量是非final的,现在改为final
  71. @Override
  72. public View getView(final int position, View convertView, ViewGroup parent) {
  73. ViewHolder holder = null;
  74. if (convertView == null) {
  75. holder=new ViewHolder();
  76. //可以理解为从vlist获取view  之后把view返回给ListView
  77. convertView = mInflater.inflate(R.layout.vlist, null);
  78. holder.title = (TextView)convertView.findViewById(R.id.title);
  79. holder.info = (TextView)convertView.findViewById(R.id.info);
  80. holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
  81. convertView.setTag(holder);
  82. }else {
  83. holder = (ViewHolder)convertView.getTag();
  84. }
  85. holder.title.setText((String)mData.get(position).get("title"));
  86. holder.info.setText((String)mData.get(position).get("info"));
  87. holder.viewBtn.setTag(position);
  88. //给Button添加单击事件  添加Button之后ListView将失去焦点  需要的直接把Button的焦点去掉
  89. holder.viewBtn.setOnClickListener(new View.OnClickListener() {
  90. @Override
  91. public void onClick(View v) {
  92. showInfo(position);
  93. }
  94. });
  95. //holder.viewBtn.setOnClickListener(MyListener(position));
  96. return convertView;
  97. }
  98. }
  99. //****************************************第二种方法,高手一般都用此种方法,具体原因,我还不清楚,有待研究
  100. //      public View getView(int position, View convertView, ViewGroup parent) {
  101. //           ViewHolder holder = null;
  102. //           MyListener myListener=null;
  103. //          if (convertView == null) {
  104. //
  105. //              holder=new ViewHolder();
  106. //
  107. //              //可以理解为从vlist获取view  之后把view返回给ListView
  108. //               myListener=new MyListener(position);
  109. //
  110. //              convertView = mInflater.inflate(R.layout.vlist, null);
  111. //              holder.title = (TextView)convertView.findViewById(R.id.title);
  112. //              holder.info = (TextView)convertView.findViewById(R.id.info);
  113. //              holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
  114. //              convertView.setTag(holder);
  115. //          }else {
  116. //              holder = (ViewHolder)convertView.getTag();
  117. //          }
  118. //
  119. //          holder.title.setText((String)mData.get(position).get("title"));
  120. //          holder.info.setText((String)mData.get(position).get("info"));
  121. //          holder.viewBtn.setTag(position);
  122. //          //给Button添加单击事件  添加Button之后ListView将失去焦点  需要的直接把Button的焦点去掉
  123. //          holder.viewBtn.setOnClickListener( myListener);
  124. //
  125. //          //holder.viewBtn.setOnClickListener(MyListener(position));
  126. //
  127. //          return convertView;
  128. //      }
  129. //  }
  130. //
  131. //   private class MyListener implements OnClickListener{
  132. //          int mPosition;
  133. //          public MyListener(int inPosition){
  134. //              mPosition= inPosition;
  135. //          }
  136. //          @Override
  137. //          public void onClick(View v) {
  138. //              // TODO Auto-generated method stub
  139. //              Toast.makeText(ListViewActivity.this, title[mPosition], Toast.LENGTH_SHORT).show();
  140. //          }
  141. //
  142. //      }
  143. //
  144. //
  145. //提取出来方便点
  146. public final class ViewHolder {
  147. public TextView title;
  148. public TextView info;
  149. public Button viewBtn;
  150. }
  151. public void showInfo(int position){
  152. ImageView img=new ImageView(ListViewActivity.this);
  153. img.setImageResource(R.drawable.b);
  154. new AlertDialog.Builder(this).setView(img)
  155. .setTitle("详情"+position)
  156. .setMessage("菜名:"+title[position]+"   价格:"+info[position])
  157. .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  158. @Override
  159. public void onClick(DialogInterface dialog, int which) {
  160. }
  161. })
  162. .show();
  163. }
  164. }

2.main.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <ListView
  7. android:id="@+id/listView"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:divider="@drawable/list_line"
  11. android:dividerHeight="1dip" />
  12. </LinearLayout>

3.vlist.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <ListView
  7. android:id="@+id/listView"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:divider="@drawable/list_line"
  11. android:dividerHeight="1dip" />
  12. </LinearLayout>

4.btn_detail_selecter.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:drawable="@drawable/btn_detail_normal" android:state_enabled="true" android:state_focused="false" android:state_pressed="false"/>
  4. <item android:drawable="@drawable/btn_detail_pressed" android:state_enabled="true" android:state_pressed="true"/>
  5. <item android:drawable="@drawable/btn_detail_pressed" android:state_enabled="true" android:state_focused="true"/>
  6. </selector>

5.item.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
  3. <item android:drawable="@drawable/item_higlight" android:state_focused="true" android:state_pressed="false"/>
  4. <item android:drawable="@drawable/item_higlight" android:state_focused="false" android:state_pressed="true"/>
  5. <item android:drawable="@drawable/item_higlight" android:state_selected="true"/>
  6. <item android:drawable="@drawable/item_higlight" android:state_focused="true"/>
  7. <item android:drawable="@drawable/item_higlight"/>
  8. </selector>

6.colors.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <resources>
  3. <color name="region">#8000ff00</color>
  4. <color name="listTitle">#ff23323b</color>
  5. <color name="text">#ff848f9b</color>
  6. <color name="write">#ffffffff</color>
  7. </resources>

7.values.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <string name="hello">Hello World, ListViewActivity!</string>
  4. <string name="app_name">ListView</string>
  5. </resources>

8.drawables.xml

[html] view plaincopy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <resources>
  3. <item type="drawable" name="bg">#80000000</item>
  4. <item type="drawable" name="transparent">#00000000</item>
  5. <item type="drawable" name="lightblue">#ffcfe1ed</item>
  6. <item type="drawable" name="readmenu_btn_bg_f">#30ffffff</item>
  7. <item type="drawable" name="readmenu_btn_bg_p">#50ffffff</item>
  8. <item type="drawable" name="blackMask">#30000000</item>
  9. </resources>

为ListView每个Item上面的按钮添加事件相关推荐

  1. (android控件)ListView的Item中设置按钮实现

    前言 在项目的开发过程中,需要Listview的Item中包含按钮的效果.在实际开发过,Item中放置按钮后,ListView 单行选择背景颜色变化的效果没有了. 问题原因 ListView 和 其它 ...

  2. Android学习之为按钮添加事件监听器的两种方法

    为按钮(包括普通按钮和图片按钮等)添加单击事件监听器有两种方法,第一种是利用匿名内部类来实现,第二种是使用onClick属性来实现 1.匿名内部类 使用匿名内部类,我们首先需要在布局文件中给按钮设置i ...

  3. java 按钮 事件_Java给按钮添加事件

    展开全部 赞一个, 提前学习, 做好预先 , 是个好习惯.java图形界面主要62616964757a686964616fe4b893e5b19e31333365636666有AWT, SWING, ...

  4. android 按钮事件添加事件吗,android为按钮添加事件的三种方法

    Android中为按钮添加事件一般有三种方法,这里总结一下,当然其实这完全是java基础内容. 1.内部类: ? 代码片段,双击复制 btn.setOnClickListener(new OnClic ...

  5. C#丨为MessageBox弹窗按钮添加事件

    为MessageBox弹窗按钮添加事件 //用一个DialogResult存放点击弹窗的结果DialogResult dialogResult = MessageBox.Show("弹窗内容 ...

  6. uniapp微信公众号跳转到小程序(是点击微信页面上面的按钮/菜单跳转)

    先看效果 先贴代码: 1.先下载依赖 npm install jweixin-module --save 2.main.js Vue.config.ignoredElements.push('wx-o ...

  7. java按钮添加事件_java中添加按钮并添加响应事件的方法(推荐)

    关于java容器,面板等自行百度学一下吧 private button loginbtn = new button("登陆"); final static jframe buyer ...

  8. Plupload 上传详细讲解,Plupload 多实例上传,Plupload多个上传按钮

    Plupload  上传详细讲. Plupload  多实例上传. Plupload  多个上传按钮. Plupload  上传成功获取返回值. DEMO: <!DOCTYPE html> ...

  9. JS事件冒泡机制和兼容性添加事件

    本篇文章主要来讲讲 事件的冒泡机制 和 添加事件的几种方法. 一. JS的时间传递顺序: 捕获阶段 -> 目标阶段 -> 冒泡阶段 捕获阶段是指从父层往子层找.比如 <body> ...

最新文章

  1. GitHub接连封杀开源项目惹众怒,CEO亲自道歉
  2. Java入门(一):Hello World !
  3. LoadRunner测试问题及解决方法总结
  4. Elasticsearch 快速入门
  5. u-boot.lds详细的分析
  6. spring的基本知识
  7. mysql —— 分表分区
  8. javascript操作listbox方法 【转】
  9. Nginx面试题(总结最全面的面试题!!!)
  10. shiro安全框架 面试题
  11. python chardet_【已解决】windows下,安装python的chardet
  12. python识别图像中的文字并点击_Python图像处理之识别图像中的文字(实例讲解)
  13. 国庆假期,人在囧途,感慨颇多
  14. pythonic希腊典故_希腊神话习语(整理).doc
  15. Comsol学习——经典案例:插销支架受力分析
  16. 复盘世预赛:国足5-0马尔代夫,吴曦成国足世预赛福星!三大前锋齐进球
  17. 如何使用FFmpeg命令处理音视频
  18. 计算机基本配置实验方案,实验4 计算机配置方案.doc
  19. 大连鸿蒙刺青怎么样,哪个部位纹身最“疼”?纹身师:敢在这三个地方纹身的,是真汉子...
  20. Web自动化测试(Selenium自动化测试框架)

热门文章

  1. 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )
  2. 【Android 异步操作】手写 Handler ( Message 消息 | ThreadLocal 线程本地变量 | Looper 中的消息队列 MessageQueue )
  3. 【Java 并发编程】CountDownLatch 简介
  4. 【bzoj3105】新Nim游戏
  5. 2017 ACM/ICPC(西安)赛后总结
  6. 祝各位节日快乐!20151111
  7. hdu 1700 (圆的内接三角形 要周长最大)
  8. Java基础笔记-异常
  9. OpenDataSource,sql开放式数据源
  10. Unix环境高级编程学习笔记(一)