为ListView每个Item上面的按钮添加事件在Adapter中响应
2015-12-31 09:24
459 查看
1.使用final变量扩展局部变量的生命周期范围主要代码
//注意原本getView方法中的int position变量是非final的,现在改为final @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder=new ViewHolder(); //可以理解为从vlist获取view 之后把view返回给ListView convertView = mInflater.inflate(R.layout.vlist, null); holder.title = (TextView)convertView.findViewById(R.id.title); holder.info = (TextView)convertView.findViewById(R.id.info); holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.title.setText((String)mData.get(position).get("title")); holder.info.setText((String)mData.get(position).get("info")); holder.viewBtn.setTag(position); //给Button添加单击事件 添加Button之后ListView将失去焦点 需要的直接把Button的焦点去掉 holder.viewBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showInfo(position); } }); //holder.viewBtn.setOnClickListener(MyListener(position)); return convertView; } } //提取出来方便点 public final class ViewHolder { public TextView title; public TextView info; public Button viewBtn; } public void showInfo(int position){ ImageView img=new ImageView(ListViewActivity.this); img.setImageResource(R.drawable.b); new AlertDialog.Builder(this).setView(img) .setTitle("详情"+position) .setMessage("菜名:"+title[position]+" 价格:"+info[position]) .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); }
2.使用类记录每个Button的位置,使每个BUTTON都有自己的Listener主要代码:
//****************************************第二种方法,高手一般都用此种方法,具体原因,我还不清楚,有待研究 public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; MyListener myListener=null; if (convertView == null) { holder=new ViewHolder(); //可以理解为从vlist获取view 之后把view返回给ListView myListener=new MyListener(position); convertView = mInflater.inflate(R.layout.vlist, null); holder.title = (TextView)convertView.findViewById(R.id.title); holder.info = (TextView)convertView.findViewById(R.id.info); holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.title.setText((String)mData.get(position).get("title")); holder.info.setText((String)mData.get(position).get("info")); holder.viewBtn.setTag(position); //给Button添加单击事件 添加Button之后ListView将失去焦点 需要的直接把Button的焦点去掉 holder.viewBtn.setOnClickListener( myListener); //holder.viewBtn.setOnClickListener(MyListener(position)); return convertView; } } private class MyListener implements OnClickListener{ int mPosition; public MyListener(int inPosition){ mPosition= inPosition; } @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(ListViewActivity.this, title[mPosition], Toast.LENGTH_SHORT).show(); } } //提取出来方便点 public final class ViewHolder { public TextView title; public TextView info; public Button viewBtn; }
相关文章推荐
- 我们一起学python-helloworld
- C++ 工具类 [StrUtil] 和 工具方法
- 在启动Windows Process Activation Service时,出现错误13:数据无效
- linux常用命令(二)
- Python标准库11 多进程探索 (multiprocessing包)
- LeetCode-29-Divide Two Integers(Numbers)-Medium
- 架构师于小波:魅族实时消息推送架构
- 如何在小部件列表中隐藏某个widget或者shortcut
- Xcode中因为证书报错的常见问题
- iOS开发之远程推送Push
- opencv图像数据操作
- Team Leader 你不再只是编码, 来炖一锅石头汤吧
- Linux 动态链接库的编译和使用实例
- 时间转换代码
- ORA-16447 Redo apply was not active at the target standby database
- 常用shell命令实战
- linux系统分区与挂载
- 在Activity中响应ListView内部按钮的点击事件的两种方法
- ZOJ1232 Adventure of Super Mario(DP+SPFA)
- css属性之appearance