- 浏览: 3010257 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
Android开发:实现带图片和checkbox的listview
转载自 http://mobile.51cto.com/android-254823.htm
项目要用到一个listview,要求是可以显示图片,后面还有有复选框。
先新建一个MyAdapter类,继承自BaseAdapter。在MyAdapter中实现对数据的绑定,我这儿由于是测试的,所以把数据写死了。
package com.zwq.umeng; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; private List<Map<String, Object>> mData; public static Map<Integer, Boolean> isSelected; public MyAdapter(Context context) { mInflater = LayoutInflater.from(context); init(); } //初始化 private void init() { mData=new ArrayList<Map<String, Object>>(); for (int i = 0; i < 5; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("img", R.drawable.icon); map.put("title", "第" + (i + 1) + "行的标题"); mData.add(map); } //这儿定义isSelected这个map是记录每个listitem的状态,初始状态全部为false。 isSelected = new HashMap<Integer, Boolean>(); for (int i = 0; i < mData.size(); i++) { isSelected.put(i, false); } } @Override public int getCount() { return mData.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; //convertView为null的时候初始化convertView。 if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.vlist, null); holder.img = (ImageView) convertView.findViewById(R.id.img); holder.title = (TextView) convertView.findViewById(R.id.title); holder.cBox = (CheckBox) convertView.findViewById(R.id.cb); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.img.setBackgroundResource((Integer) mData.get(position).get( "img")); holder.title.setText(mData.get(position).get("title").toString()); holder.cBox.setChecked(isSelected.get(position)); return convertView; } public final class ViewHolder { public ImageView img; public TextView title; public CheckBox cBox; } }
上面类中要注意getView()方法中对数据的处理。
接下要新建一个list.xml文件,这个就是布局image、textview、checkbox。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical"/> <TextView android:id="@+id/title" android:textSize="18dip" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <CheckBox android:id="@+id/cb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="false" android:focusableInTouchMode="false" android:clickable="false" android:checkMark="?android:attr/listChoiceIndicatorMultiple"/> </LinearLayout>
android:layout_weight="1"这一句可以使中间的textview权重增大,从而后面的checkbok可以居右显示。
android:focusable="false" android:focusableInTouchMode="false" android:clickable="false"
这三句很重要,如果不加就会出现错误。
由于checkbox的点击事件优先级比listview的高,所以要在checkbox中添加android:focusable="false",使得checkbox初始的时候没有获取焦点。
接下来在main.xml中添加Listview组件
<ListView android:id="@+id/lv" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
list=(ListView)findViewById(R.id.lv); MyAdapter adapter=new MyAdapter(this); list.setAdapter(adapter); list.setItemsCanFocus(false); list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); list.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ViewHolder vHollder = (ViewHolder) view.getTag(); //在每次获取点击的item时将对于的checkbox状态改变,同时修改map的值。 vHollder.cBox.toggle(); MyAdapter.isSelected.put(position, vHollder.cBox.isChecked()); } });
最后看一下效果图:
要获取哪些项目被选择了,可以这样测试:
OnClickListener bPop = new OnClickListener() { @Override public void onClick(View v) { for(int i=0;i<list.getCount();i++){ if(MyAdapter.isSelected.get(i)){ ViewHolder vHollder = (ViewHolder) list.getChildAt(i).getTag(); Log.i(TAG, "--onClick --"+vHollder.title.getText()); } } } };
总结 :
1、数据可以在Activity中获取,在初始化Adapter的时候当做参数传递过去,这样就可以是list编程动态的。
2、对MyAdapter中getview的理解不够,尤其是convertView.setTag(holder),如果您对getview有什么新的使用心得可以发Email:zhousn@51cto.com ,51CTO将与您一起分享!
发表评论
-
Android Fragment 真正的完全解析(下)
2015-03-25 14:30 1130Android Fragment 真正 ... -
Android Fragment 真正的完全解析(上)
2015-03-25 10:14 917Android Fragment 真正的 ... -
Activity的生命周期方法
2015-03-25 09:54 592一:Activity的生命周期方法 Android ... -
Android在layout xml中使用include
2015-03-25 07:28 1009在Android的layout样式定义中,可以使 ... -
一个支持圆角的快速ImageView:RoundedImageView
2015-03-07 09:50 11104一个支持圆角的快速ImageView:Rounded ... -
ImageView图片设置
2015-03-05 23:08 965显示任意图像,例如图标。ImageView类可以加载 ... -
ListActivity的onListItemClick不响应的解决办法
2015-03-04 17:57 1117ListActivity的onListItemClic ... -
ListView中有控件隐藏或显示造成的显示错误问题
2015-03-03 23:03 1863ListView中有控件隐藏或显示造成的显示错误问题 ... -
Android中Application类用法
2015-03-03 09:12 1008Android中Application类用法 ... -
Android使用Application总结
2015-03-03 09:11 1204Android使用Application ... -
在android中运行java main方法
2015-02-27 10:38 1010在android中运行java main方法 ... -
android BitmapFactory.Options
2015-02-19 21:01 1044public Bitmap inBi ... -
android 基础demo例子
2015-02-16 21:06 844demoDatas.add(new DemoBe ... -
Android大图片裁剪终极解决方案
2015-02-15 17:08 2179Android大图片裁剪终 ... -
Android_照相机Camera_调用系统照相机返回data为空
2015-02-15 14:17 1300Android_照相机Camera_调用系统照相机返回 ... -
Android: 打印Bundle内容
2015-02-15 14:11 2995Android: 打印Bundle内容 有的时 ... -
android线程、UI、AsyncTask
2015-02-13 18:06 1292本文是转摘的,看过了觉得很好!所以转了过来!如果你想要 ... -
Fragment中ListView的使用
2015-02-06 23:01 2137Fragment中ListView的使用 直接 ... -
在安卓开发时用酷派手机无法打印出应用内的日志的解决方法
2014-12-11 20:39 1212在安卓开发时用酷派手机无法打印出应用内的日志的解决方法 ... -
查看安卓APK文件证书的方法
2014-12-04 10:05 1035************************** ...
相关推荐
总的来说,CheckBoxListView是Android开发中一个实用的组件,它通过优化选择逻辑和处理图片错位问题,提升了用户在列表中的选择体验。理解和掌握这种实现方式对于提升Android应用的用户体验和开发技能非常有帮助。
在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。当需要在列表项中添加选择功能时,我们通常会结合使用ListView与CheckBox。本篇将详细讲解如何利用这两种组件实现ListView中的单选功能。 ...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。在许多场景下,我们需要在ListView中加入复选框(Checkbox),实现多选功能,例如用户可以选择多个项目进行操作。本文将详细介绍如何在Android中...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。在某些场景下,我们可能需要在ListView的每个项中添加一个复选框(CheckBox),以便用户可以选择多个条目。这个功能在各种应用中非常常见,...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。当需要在ListView的每一项中加入复选框(Checkbox)时,这通常涉及到自定义Adapter和处理复选状态的逻辑。以下是对这个主题的详细阐述:...
在Android开发中,ListView是一种常用的控件,用于展示大量数据列表。当用户需要在列表项中进行多选操作时,通常会结合Checkbox来实现。本文将深入探讨如何在ListView中实现Checkbox多选功能,以及相关的Android编程...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。而CheckBox则是一种复选框组件,常用于让用户进行多选操作。当ListView与CheckBox结合使用时,可以实现用户在列表中选择多个项目的功能。本文将...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。然而,ListView的复用机制有时会导致一些问题,特别是在涉及复选框(Checkbox)的状态管理时。本篇文章将详细探讨这个问题,并提供一个完美的...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在实际应用中,我们经常需要在ListView的每个项中添加CheckBox,以便用户可以进行多选操作,如选择联系人、选择任务等。本篇文章将深入讲解...
在我们的示例代码中,我们实现了一个完美的 ListView 中添加 CheckBox 的解决方案,它可以解决事件冲突和复用错误的问题。我们使用了一个自定义的 Adapter 来控制 ListView 中的每个项目,并使用了一个 HashMap 来...
在Android开发中,ListView是常用的数据展示控件,它可以高效地显示大量数据并支持滚动操作。在实际应用中,我们经常需要实现一个功能,让用户能够选择ListView中的多个条目进行批量删除,这正是"Android ListView+...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的高效性和可滚动性使得它在各种场景下都能发挥重要作用。本教程将深入探讨如何在ListView中集成CheckBox,以便用户可以选择列表中的多项...
### Android ListView 中实现多选、全选、反选与...通过上述步骤,我们可以实现在`Android`应用中带有`CheckBox`的`ListView`,并支持全选、反选和删除等功能。这不仅增强了应用程序的功能性,还提高了用户的使用体验。
在Android开发中,ListView是一种常用的视图组件,用于展示大量数据列表。CheckBox则是用来实现复选功能,常常与ListView结合,以实现用户对列表项的多选操作。本篇文章将详细探讨如何在Android中实现一个具有多选、...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。CheckBox则是提供多选功能的组件。当这两者结合时,可以实现用户在ListView中进行多项选择,例如全选、取消选中以及删除操作。以下是关于...
在Android开发中,ListView是常用的数据展示组件,它允许用户滚动查看大量的数据项。然而,当ListView中的元素包含可交互的控件,如CheckBox时,会遇到一些常见问题,如焦点冲突和视图复用导致的显示异常。本文将...
本篇文章将深入探讨如何在ListView中实现CheckBox的多选功能,并记录用户的选定状态。ListView是Android中常用的一个控件,它允许我们以列表的形式展示大量数据,而CheckBox则提供了一种让用户进行多选操作的方式。 ...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的列表数据。当需要在ListView中添加复选框(CheckBox)来实现多选、全选和反选功能时,需要处理多个技术点。以下是对这个主题的详细解释: 1. **...
总之,“带CheckBox的listView”项目涵盖了Android开发中常见的交互需求,通过解决已知的bug,提供了一个稳定且功能完善的实现。对于开发者来说,这是一个很好的学习和参考资源,可以帮助快速构建具备多选功能的列表...