- 浏览: 1321183 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (132)
- android Launcher (15)
- 收藏夹 (3)
- UI设计 (28)
- J2EE (2)
- android网络编程 (8)
- 项目经理是熬出来的 (8)
- Android图像处理 (5)
- 系统层开发 (12)
- 数据库 (2)
- 程序员是熬出来的 (2)
- Android技巧 (11)
- 地图相关 (2)
- Android底层 (9)
- Android疑难杂症 (4)
- 开发工具 (4)
- 知识梳理 (8)
- 源码阅读 (7)
- Media媒体库 (5)
- 调试技术 (3)
- Android蓝牙 (3)
- 动画特效 (5)
- jni (3)
- 串口通信 (1)
- Android优化 (3)
- 架构设计 (1)
- Android Test (1)
- 翻译系列 (0)
最新评论
-
我说123木头人雪雪:
...
Android截屏并对图片做高斯模糊处理 -
ysc123shift:
没有源码。
Android截屏并对图片做高斯模糊处理 -
我de专属doll:
你那个Jni库是自己编译的还是有现成的呢?
Android media媒体库分析之:分类别统计媒体文件大小 -
zhunanfengfeimeng:
想做项目经理?这些工具必须了解 -
ls0609:
一个带人脸识别的智能照相机demohttp://blog.cs ...
Android 调用相机,获取的图片太小
项目要用到一个listview,要求是可以显示图片,后面还有有复选框。
先新建一个MyAdapter类,继承自BaseAdapter。在MyAdapter中实现对数据的绑定,我这儿由于是测试的,所以把数据写死了。
上面类中要注意getView()方法中对数据的处理。
convertView可以认为是元素的缓存,因为元素本身没有变化,因此可以判断如果非空,就可以复用。减少重复new新对象,系统不断回收所带来的内存消耗!
具体可以参考这儿的文章:http://marshal.easymorse.com/archives/3944
接下要新建一个list.xml文件,这个就是布局image、textview、checkbox。
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组件
接下来就是在activity中调用:
最新看一下效果图:
要获取哪些项目被选择了,可以这样测试:
总结:
1、ListView的android:cacheColorHint="#00000000"会消除listview拖动时的全选效果。
2、ListView的getView()方法只获取当前屏幕可以显示出的view,对隐藏的,就是拖动可以看见的不会绘制,只有需要显示的时候才绘制。
3、数据可以在activity中获取,在初始化adapter的时候当做参数传递过去,这样就可以是list变成动态的。
4、给checkbox添加OnClickListener才会优先响应list item里面的checkbox。checkbox的OnClickListener监听实现方法要写在getview方法里面,否则获取不到position。如果不需要对checkbox做优先响应,不需要给checkbox添加OnClickListener。
5、如果要多选或全选需要新建一个list:
在点击listview 的item或者checkbox时将isSelected的值做相应改变。
6、如果不指定listview的分割线则会有些粗有些细,我指定了之后可以均匀显示。给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()方法中对数据的处理。
convertView可以认为是元素的缓存,因为元素本身没有变化,因此可以判断如果非空,就可以复用。减少重复new新对象,系统不断回收所带来的内存消耗!
具体可以参考这儿的文章:http://marshal.easymorse.com/archives/3944
接下要新建一个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"/>
接下来就是在activity中调用:
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、ListView的android:cacheColorHint="#00000000"会消除listview拖动时的全选效果。
2、ListView的getView()方法只获取当前屏幕可以显示出的view,对隐藏的,就是拖动可以看见的不会绘制,只有需要显示的时候才绘制。
3、数据可以在activity中获取,在初始化adapter的时候当做参数传递过去,这样就可以是list变成动态的。
4、给checkbox添加OnClickListener才会优先响应list item里面的checkbox。checkbox的OnClickListener监听实现方法要写在getview方法里面,否则获取不到position。如果不需要对checkbox做优先响应,不需要给checkbox添加OnClickListener。
5、如果要多选或全选需要新建一个list:
public static Map<Integer, Boolean> isSelected;
在点击listview 的item或者checkbox时将isSelected的值做相应改变。
6、如果不指定listview的分割线则会有些粗有些细,我指定了之后可以均匀显示。给listview添加下面属性:
android:divider="#8B8B00" android:dividerHeight="1px"
发表评论
-
Android多Activity通用Title
2015-05-20 10:12 6828先看一下效果图: 要实现在每个页面显示相同的Title, ... -
Android textview实现局部点击
2015-04-20 18:18 4651先看效果图: 实现代码,很简单的: private ... -
Android中单击空白区域隐藏键盘
2015-03-06 11:29 4748项目开发中,产品经理拿着iPhone上的效果说Android! ... -
Android ViewPager切换的N种动画
2014-09-10 17:55 49887基于上一篇《Android ViewP ... -
Android ViewPager使用技巧
2014-09-10 17:23 10753最近项目中用到ViewPage,因此对这个3.1之后新增的接口 ... -
知识梳理:Android子线程中更新UI的3种方法
2014-09-03 16:09 76465在Android项目中经常有碰到这样的问题,在子线程中完成耗时 ... -
Android ListView 滚动的N种方法
2014-07-25 16:07 8375Android 里面让ListView滚动有N种方法,这儿列举 ... -
(转载)关于分辨率,还是没搞清楚
2014-07-22 15:41 8701.drawable-(hdpi,mdpi,ldpi)的区别 ... -
Android多分辨率支持
2014-01-10 11:45 0Android官方给出的解决方案: http://develo ... -
Android播放动画后点击事件消失
2012-11-09 10:36 7254问题:为imageview添加了动画,动画播放完之后image ... -
为Android应用程序添加两个入口
2012-10-29 09:43 1742项目中有这样一个需求: 安装一个APK之后,生成两个图标,点击 ... -
Android 获取屏幕尺寸
2012-06-28 10:28 1905项目需要在service中获取屏幕分辨率,即手机的尺寸,网上搜 ... -
Android dialog 全屏
2012-02-11 17:08 19277Android中让Dialog全屏: 一、在style中定义样 ... -
android 让Activity透明起来
2011-08-26 21:55 3481让自己的Activity变成透明的:关键是设置Activity ... -
android图片缩放(指定大小)
2011-07-15 10:58 19263private Drawable zoomDrawabl ... -
用ScrollView和TableLayout实现类似于Gallery的效果
2014-07-15 09:45 3632想实现左右拖动ImageView或TextView的效果,于是 ... -
android自定义ViewGroup总结
2014-07-15 09:45 6902在稍微复杂一些的布局中就要自己定义一个ViewGroup,里面 ... -
android 屏幕密度和资源的关系
2014-07-15 09:46 1318一、概念介绍: 1、density值表示每英寸有多少个显示点, ... -
android通知小结
2011-06-17 10:22 3109有时候要让我们发的通知不被用户清除,这就需要将通知加入正在运行 ... -
android小部件(widget)小结
2011-06-17 10:21 7339一、为widget添加点击事件 在继承自AppWidgetPr ...
相关推荐
总的来说,CheckBoxListView是Android开发中一个实用的组件,它通过优化选择逻辑和处理图片错位问题,提升了用户在列表中的选择体验。理解和掌握这种实现方式对于提升Android应用的用户体验和开发技能非常有帮助。
本篇文章将深入探讨如何在ListView中实现CheckBox的多选功能,并使用ViewHolder和ConvertView优化性能。 1. **ListView与Adapter基础** - ListView是Android中用于显示长列表的视图,它可以动态加载和回收视图,以...
本篇将详细讲解如何利用这两种组件实现ListView中的单选功能。 首先,我们需要理解ListView的工作原理。ListView通过Adapter将数据源(如ArrayList)绑定到视图上,每个数据项对应ListView的一个列表项。为了实现...
在许多场景下,我们需要在ListView中加入复选框(Checkbox),实现多选功能,例如用户可以选择多个项目进行操作。本文将详细介绍如何在Android中使用ListView和Checkbox实现多选功能。 一、ListView概述 ListView是...
2. **ListView中的CheckBox** - 在ListView的每个条目中插入一个CheckBox,可以通过自定义`ListView`的`Adapter`实现。通常,我们会创建一个继承自`BaseAdapter`的自定义类,并在`getView()`方法中设置CheckBox。 ...
综上所述,要在Android的ListView中使用Checkbox,我们需要创建自定义Adapter,设计Checkbox的布局,管理复选状态,监听并处理用户操作,同时注意性能优化和状态恢复。在实际项目中,这样的实现方式能够提供灵活的...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。然而,ListView的复用机制有时会导致一些问题,特别是在涉及复选框(Checkbox)的状态管理时。本篇文章将详细探讨这个问题,并提供一个完美的...
1、ListView item中加入checkbox后onListItemClick 事件无法触发。 原因:checkbox的优先级高于ListItem于是屏蔽了ListItem的单击事件。 解决方案:设置checkbox的android:focusable="false" 2、选择其中的...
在我们的示例代码中,我们实现了一个完美的 ListView 中添加 CheckBox 的解决方案,它可以解决事件冲突和复用错误的问题。我们使用了一个自定义的 Adapter 来控制 ListView 中的每个项目,并使用了一个 HashMap 来...
然而,当ListView中的元素包含可交互的控件,如CheckBox时,会遇到一些常见问题,如焦点冲突和视图复用导致的显示异常。本文将详细探讨这些问题以及如何通过优化来实现“完美解决ListView和CheckBox的焦点冲突及...
本篇文章将详细探讨如何在Android中实现一个具有多选、反选、删除和全选功能的ListView,结合CheckBox的使用。 首先,我们需要创建一个自定义的ListView项布局,包含一个TextView用于显示数据,以及一个CheckBox...
在实际应用中,我们经常需要实现一个功能,让用户能够选择ListView中的多个条目进行批量删除,这正是"Android ListView+checkbox 实现批量删除"这个主题所涵盖的知识点。下面我们将详细探讨如何在Android中实现这一...
通过以上步骤,我们可以实现ListView中CheckBox的选中状态管理和选中项记录。这不仅提高了用户体验,也为开发复杂的业务逻辑提供了基础。在实际项目中,可能还需要考虑多线程同步、异常处理等细节,以保证程序的稳定...
在Android开发中,ListView与...总之,处理ListView与ScrollView的冲突以及ListView中CheckBox的使用,需要深入理解Android的列表视图机制和适配器模式。合理的设计和编程实践能够帮助我们构建高效且用户友好的界面。
综上所述,实现"Android中使用ListView和CheckBox实现购物车多选功能"涉及到ListView的自定义Adapter、CheckBox的状态管理、全选/全不选功能、多选操作的实现以及性能优化等多个环节。这个过程中需要充分理解Android...
本文将深入探讨如何在ListView中实现Checkbox多选功能,以及相关的Android编程技巧。 首先,我们需要创建一个自定义的ListView adapter。这个adapter将负责渲染每一项数据,并在每一项中包含一个Checkbox。在Java...
本示例"Android中ListView结合CheckBox获取选中项.rar"旨在教授如何在ListView中集成CheckBox,并有效地获取用户选择的数据。 1. **ListView基本使用** - ListView是一个可以滚动的视图,它能显示一行行的数据。...
本文将详细介绍如何在Android应用中实现ListView与CheckBox的联合使用,包括数据绑定、事件监听以及选中状态管理。 首先,我们需要创建一个自定义的ListView项布局,该布局中包含一个CheckBox。例如,创建一个名为...
Android 长按Listview显示CheckBox,实现批量删除,具体功能请参考: http://blog.csdn.net/ddxxll2008/article/details/49125759