- 浏览: 518393 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
tangyunliang:
大哥你太历害了谢谢
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
u013015029:
LZ,请问下,在// 添加消息到聊天窗口 , 这里获取Ed ...
Android基于XMPP Smack Openfire开发IM【四】初步实现两个客户端通信 -
endual:
怎么保持会话,我搞不懂啊
Android基于XMPP Smack Openfire开发IM【一】登录openfire服务器 -
donala_zq:
显示:[2013-11-30 11:50:36 - Andro ...
android-----------新浪微博 -
donala_zq:
哥,运行不了啊
android-----------新浪微博
ListView数据项隔行换色控制实现
运行效果图:
[img]
[/img]
工程结构图:
[img]
[/img]
主类:
listview_items.xml
listview_item2.xml
main.xml
separator.xml
配置文件:
运行效果图:
[img]
[/img]
工程结构图:
[img]
[/img]
主类:
package com.amaker.list; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; /** * @Title: ListViewBackgroundDemoActivity.java * @Package com.xiaoma.listviewbackground * @Description: 小马学习隔行换色,一定仔细看注释 * @author XiaoMa */ public class ListViewBackgroundDemoActivity extends Activity implements OnItemSelectedListener{ private ListView lv = null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); lv = (ListView)findViewById(R.id.listview); /** * 设置快速滚动块可用,这个大家注意下,就是设置之后,ListView * 里面的数据条数必须大于一定数量(小马试了下,这个数量是大于一屏) * 才会显示这个小拖块,不然无效 */ lv.setFastScrollEnabled(true); lv.setOnItemSelectedListener(this); lv.setAdapter(new ListDemoAdapter(getApplicationContext())); } /** * @Title: ListViewBackgroundDemoActivity.java * @Package com.xiaoma.listviewbackground * @Description:适配器实现 * @author XiaoMa */ private class ListDemoAdapter extends BaseAdapter{ private static final int ITEM = 0; private static final int SEPARATOR = 1; private static final int TYPE_MAX_COUNT = SEPARATOR + 1; private LayoutInflater inflater = null ; private List<String> listItem = new ArrayList<String>(); /* * 用这个set来保存分隔线的位置,这个地方必须注意,小马写两个不同类型的Set来跟大家复习下 * 这两个小东东的不同之处,效果太神奇了,这个Set你该用哪个会直接影响到换色效果的,不同之 * 处是: * * TreeSet:基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序 * 或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法 * * Set:一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) * 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学 * 上的 set 抽象 */ @SuppressWarnings("rawtypes") //private Set set = new HashSet(); private TreeSet set = new TreeSet(); private Map map = new HashMap(); public ListDemoAdapter(Context context ){ this.inflater = LayoutInflater.from(context); /** * 大家稍微注意下这个循环,i从1开始?为什么? 小马在这犯的错 * 每5条数据加一条换色Item是用 i%6 == 0来控制的,如果这 * 个i值从0开始的话,会出现上面贴图中错误的换色,看图三,图四, * 原因是取余的时候小马犯了低级错误,小错,记下:两数取余,前者 * 大于后者时,取余会按正常取余来取,如果前者小于后者时,取余 * 后的值始终是前者,如果这个地方的i从0开始取的话,正好是满 * 足取余后的值等于0这个情况,就出现上面两图中的错误隔色图了, * 当前者大于等于后者时,这个隔色就又正常了,一定注意下,记在这, * 提醒大家也提醒自己,吼吼,听不明白的可以看下小马在工程中加的 * 一个测试类(测试取余规律的类PercentTest.java) */ //填充ListView for(int i=1;i<=50;i++){ this.listItem.add("添加的第"+i+"条数据"); if(i%6 == 0){ addSeparatorItem(); } Log.i("KKK", "添加的第"+i+"条数据"); } } /** * 添加换色项方法实现 * @param item */ @SuppressWarnings("unchecked") public void addSeparatorItem() { set.add(listItem.size()-1); notifyDataSetChanged(); } /** * 此处是根据特定值(在getView方法中加入) * 来判断应该绘制选项还是换色选项的分支值 * 由position返回view type id */ @Override public int getItemViewType(int position) { return set.contains(position) ? SEPARATOR : ITEM; } /** * 返回你有多少个不同的布局 */ @Override public int getViewTypeCount() { return TYPE_MAX_COUNT; } @Override public int getCount() { return listItem.size(); } @Override public Object getItem(int position) { return listItem.get(position); } @Override public long getItemId(int position) { return position; } /** * 这个地方也需要注意下,小马这个方法里面写的有点多了,其实官方是不支持在 * getView()方法中写太多的逻辑因为你手拖下屏幕,这个方法是逛调用 * 的,所以太多逻辑不适合放在这个地方,大家可自行调整下,但有些还是必 * 须的,写在这无防...吼吼 */ @Override public View getView(int position, View convertView, ViewGroup parent) { int type = getItemViewType(position); XiaoMa xiaoMa = null; final int location = position; if(convertView == null){ switch (type) { //如果需要绘制选项时分支 case ITEM: xiaoMa = new XiaoMa(); convertView = inflater.inflate(R.layout.listview_items, null); xiaoMa.iv = (ImageView)convertView.findViewById(R.id.ItemImage); xiaoMa.tv = (TextView)convertView.findViewById(R.id.ItemTitle); xiaoMa.text = (TextView)convertView.findViewById(R.id.itemtext); xiaoMa.btn = (Button)convertView.findViewById(R.id.view_btn); break; //如果需要绘制换色选项时分支 case SEPARATOR: xiaoMa = new XiaoMa(); convertView = inflater.inflate(R.layout.listview_items, null); xiaoMa.iv = (ImageView)convertView.findViewById(R.id.ItemImage); xiaoMa.tv = (TextView)convertView.findViewById(R.id.ItemTitle); xiaoMa.text = (TextView)convertView.findViewById(R.id.itemtext); xiaoMa.btn = (Button)convertView.findViewById(R.id.view_btn); convertView = inflater.inflate(R.layout.separator, null); /* * 这个地方的drawable2用法跟在ListView换色选项布局中的 * android:background="@drawable/gradient_box" * 效果是一样的,小马写在这,熟悉下两种方式,大家根据自己需要改 */ Drawable drawable2 = getResources().getDrawable(R.drawable.gradient_box); xiaoMa.sep = (TextView)convertView.findViewById(R.id.sep); xiaoMa.sep.setBackgroundDrawable(drawable2); break; } /* * 此处小马犯错了,如果下面这句不加的话, * 加载时正常,拖动列表时就会报空指针了, * 小点注意下 */ convertView.setTag(xiaoMa); }else{ xiaoMa = (XiaoMa)convertView.getTag(); } xiaoMa.iv.setBackgroundResource(R.drawable.xiaolvzi); xiaoMa.tv.setText("这是第"+(position+1)+"个标题"); xiaoMa.text.setText("这是第"+(position+1)+"个概述"); /** * 按钮事件监听实现 */ xiaoMa.btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //单击Item按钮后,弹出提示 ShowDialog(location); } }); return convertView; } } /** * 弹出提示实现,这个地方扩展一下,细心的话大家会发现小马违反了方法命名规范,其实不是的, * 安卓Activity有临时弹出对话框方法的,跟下面这个方法只有一个字母之差(小马故意 * 首字母大写的),安卓自带弹出方法在这个方法下面的注释中 * @param posi */ private void ShowDialog(int posi){ Toast.makeText(getApplicationContext(), "单击了第"+(posi+1) +"个按钮", Toast.LENGTH_SHORT).show(); /* * 下面这两个方法大家熟悉吧?调用系统提供的临时弹出对话框,必须实现下面的 * onCreateDialog(int id)方法 */ showDialog(1);//弹出时可以做如:从服务器取数据等操作 /** * 这个地方小马就简单的睡眠5秒种来模拟从服务器下载数据完成后关闭对话框 */ new Thread(new Runnable() { @Override public void run() { try { Log.i("KKK", "已进入睡眠"); Thread.sleep(3000); dismissDialog(1);//隐藏 表示数据下载完毕等的... } catch (Exception e) { e.printStackTrace(); } } }).start(); } @Override protected Dialog onCreateDialog(int id) { /* * 下面这个构造器中的this不能用getApplicationContext()来代替, * 但可用类名.this来代替,没有为什么, 必须这样写!!!这个地方小马晕了 * 不少时间,如果直接get....代码没错,但还是会报错,很邪门的哦 ... */ ProgressDialog dialog = new ProgressDialog(this); //小测试,中文就临时写这了,大家要注意把内容都写到string.xml中去,好习惯从小开始养,嘿嘿 dialog.setCancelable(false);//设置用户不能用返回键取消对话框 dialog.setIcon(getResources().getDrawable(R.drawable.xiaolvzi)); dialog.setTitle("那些年,我们一起追的女孩"); dialog.setMessage("小马果 呆丫头 O_O"); dialog.show(); return dialog; } /** * @Title: ListViewBackgroundDemoActivity.java * @Package com.xiaoma.listviewbackground * @Description: 为提高加载效率而写的类,可以看下ListView优化 * @author XiaoMa */ public final class XiaoMa{ public ImageView iv ; public TextView tv ; public Button btn ; public TextView text; public TextView sep; } @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { } @Override public void onNothingSelected(AdapterView<?> parent) { } }
listview_items.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:background="@drawable/item_bg" > <ImageView android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:paddingTop="12dip" /> <TextView android:id="@+id/ItemTitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/view_btn" android:layout_toRightOf="@id/ItemImage" android:textColor="#000000" android:textSize="20dip" /> <TextView android:id="@+id/itemtext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/ItemTitle" android:textColor="#000000" android:layout_marginTop="10dip" android:layout_toRightOf="@+id/ItemImage" android:textSize="10dip" /> <Button android:id="@+id/view_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_alignParentRight="true" android:text="XiaoMa" /> </RelativeLayout>
listview_item2.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/item_bg" android:orientation="horizontal" > <LinearLayout android:id="@+id/main" > <ImageView android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:paddingTop="12dip" /> <TextView android:id="@+id/ItemTitle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/view_btn" android:layout_toRightOf="@id/ItemImage" android:textColor="#000000" android:textSize="20dip" /> <TextView android:id="@+id/itemtext" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@+id/ItemTitle" android:layout_marginTop="10dip" android:layout_toRightOf="@+id/ItemImage" android:textColor="#000000" android:textSize="10dip" /> <Button android:id="@+id/view_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:gravity="center" android:text="XiaoMa" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/main" > <TextView android:id="@+id/sep" android:layout_width="fill_parent" android:layout_height="wrap_content" android:focusable="false" android:text="吼吼" /> </LinearLayout> </RelativeLayout>
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- Back Up <ListView android:id="@+id/listview" android:layout_width="wrap_content" android:layout_height="fill_parent" android:smoothScrollbar="true" android:drawSelectorOnTop="false" android:listSelector="#00000000" /> --> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:smoothScrollbar="true" android:choiceMode="none" android:focusable="false" android:scrollingCache="false" android:clickable="false" android:dividerHeight="0.5dip" /> <!-- <ListView android:id="@+id/list_coupon" android:layout_height="wrap_content" android:drawSelectorOnTop="false" android:choiceMode="none" android:focusable="false" android:scrollingCache="false" android:fadingEdge="none" android:focusableInTouchMode="false" android:clickable="false" android:dividerHeight="0.5dip" android:divider="@drawable/separator" /> --> </LinearLayout>
separator.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/sep" android:layout_width="fill_parent" android:layout_height="wrap_content" android:focusable="false" android:textColor="#000000" android:gravity="center_horizontal" android:text="哈哈哈,这就是个换行标志 " /> </LinearLayout>
配置文件:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.amaker.list" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/xiaoma" android:label="@string/app_name" > <activity android:name=".ListViewBackgroundDemoActivity" 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>
发表评论
-
Android中如何模拟一次点击(touch)事件
2014-05-06 10:41 0在Android中有时需要模拟某一个View的touch事件, ... -
Android程序Crash时的异常上报
2014-04-28 18:15 0http://blog.csdn.net/singwhatiw ... -
android程序中证书签名校验的方法
2014-04-28 17:58 1907android程序中证书签名校验的方法一 2013-02 ... -
MD5理解错了,哎
2014-03-17 14:14 0MD5只对数据加密是无法解密的,也就是说,你把100加密后,就 ... -
Android 获取网络时间
2014-03-12 11:42 2013Android 获取网络时间 在网上看到的最常见的方式有: ... -
SQLite清空表并将自增列归零
2014-03-05 18:02 1472SQLite清空表并将自增列归零 作者:Zhu Yanfeng ... -
Handler小看一下
2013-11-11 16:42 0android handler调用post方法还是阻塞 su ... -
Frame Animation小看一下
2013-10-12 16:30 724Demo运行效果图: 源码: -
动画小学一下
2013-10-12 16:14 696转自: http://www.eoeandroid.com/f ... -
Android 动画之ScaleAnimation应用详解
2013-10-12 15:49 965===============eoeAndroid社区推荐:= ... -
android开发中的一个工具类
2013-06-19 16:04 0package com.wanpu.login.dialog; ... -
android TextView怎么设置个别字体颜色并换行?
2013-06-20 09:25 1639(1)、TextView 设置个别字体颜色 TextView ... -
Android开发之文件下载,状态时显示下载进度,点击自动安装
2013-05-07 15:38 1371在进行软件升级时,需要进行文件下载,在这里实现自定义的文件下载 ... -
android中的状态保存
2013-04-07 14:21 935package com.zzl.call; import ... -
android动画基础:tween动画
2013-04-06 11:21 1181工程结构图: [img] [/img] 四个动画的xml ... -
面试中遇到的几个问题
2013-06-09 11:56 946SAX与DOM之间的区别 SAX ( ... -
Android获取其他包的Context实例,然后调用它的方法,反射!!!
2013-03-25 10:32 1163Android中有Context的概念,想必大家都知道。Con ... -
Android的内存机制和常见泄漏情形
2013-03-06 16:55 758一、 Android的内存机制 Android的程序由Ja ... -
JUnit测试小小demo
2013-03-06 16:37 1090运行效果图: [img] [/img] 项目结构图 ... -
android开发中的异常小工具
2013-03-04 15:53 864package com.zzl.tools; impor ...
相关推荐
winfrom 隔行换色
模块内有使用说明,更具说明操作可以使ListView上隔行的颜色改变,以便查看,颜色可以自己设置。
WPF ListView 数据项可编辑
VB实现对Listview列表控件的换色、添加背景色效果,可对ListView列表进行换色,示例给出了三种颜色样式,另外还可决定是否显示网格,你可把本源码作为一个为ListView列表每行添加背景色的例子,这样会使显示在里面的...
ListView自定义Adapter实现多视图Item
好例子网_Listview 数据项分组显示
Delphi的listview加强版,新增点表头自动排序等细节功能。
listview隔行着色
实现了在多个ListView控件中拖动数据项,判断数据项是否存在等。
ListView项之间的距离, ListView项间距, ListView图片间距,ListView图片
通过继承SimpleAdapter类,重写里面的getview方法来实现颜色隔行显示的功能。本代码一切从简、通俗易懂,适合于新接触SimpleAdapter的初学者
ListView多项选择功能的实现.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
RecyclerView隶属于v7包下的一员大将,是谷歌为开发人员准备的一个功能强大的控件,他不仅可以拥有listview和gridview那样集成数据集,还有着设置水平、垂直、正反向显示和实现瀑布流的效果,你只需要了解一下就可以...
针对WPF中ListView的基础样式进行模板重写,可以选择去除ListView的背景颜色或添加自己想要的选中时或者鼠标移上去选择项的背景颜色
C#332-listview数据添加去闪烁源代码
WPF前台代码实现数据绑定,Listview中使用数据模版,使用样式的例子,还是用了数据转换。
listview实现动态加载数据,值得学习
Android ListView分类实现 - 第二种实现方式
支持ListView动态修改数据,选定行变色,单个cell规则,支持Cell按钮, 支持xml解析,支持登录界面权限控制, 三层树形数据提供给TreeView 实在是没有时间了,否则第四层数据计划提供给ListView (近期如果有时间,...