6.listview显示不用条目
文件夹页面

* @param index 箱子的索引值* @return* 对应的uri 或null*/public static Uri getUriFromIndex(int index){switch (index) {case 0:return MyConstants.URI_INBOX;case 1:return MyConstants.URI_OUTBOX;case 2:return MyConstants.URI_DRAFT;case 3:return MyConstants.URI_SENT;}return null;}
public class FolderUI extends ListActivity implements OnItemClickListener{private ListView listView;private String [] names={"收件箱","发件箱","草稿箱","已发送"};private int[] iconIds={R.drawable.a_f_inbox,R.drawable.a_f_outbox,R.drawable.a_f_draft,R.drawable.a_f_sent};private int [] counts=new int[4];public Context ctx;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ctx = this;listView = getListView();adapter = new FolderListAdapter();listView.setAdapter(adapter);prepareData();listView.setOnItemClickListener(this);}private void prepareData() {MyQueryHandler myQueryHandler = new MyQueryHandler(getContentResolver());for (int i = 0; i <4; i++) {myQueryHandler.startQuery(i, null, Tools.getUriFromIndex(i), new String[]{" count(*) "}, null, null, null);}myQueryHandler.setOnCursorChangedListener(new MyQueryHandler.IOnCursorChangedListener() {@Overridepublic void onCursorChanged(int token, Object cookie, Cursor cursor) {//移动至第一行cursor.moveToFirst();// 获得短信的个数int count = cursor.getInt(0); // 仅查询 短信的条数,仅返回一列// 以 token 为counts的下标,存短信个数counts[token] = count;//刷新listViewadapter.notifyDataSetChanged();}});}private FolderListAdapter adapter;class FolderListAdapter extends BaseAdapter{@Overridepublic int getCount() {return names.length;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view;if(convertView == null){view = View.inflate(ctx, R.layout.list_item_folder, null);}else{view = convertView;}ImageView icon = (ImageView) view.findViewById(R.id.iv_icon_folder);TextView name = (TextView) view.findViewById(R.id.tv_name_folder);TextView count = (TextView) view.findViewById(R.id.tv_count_folder);icon.setBackgroundResource(iconIds[position]);name.setText(names[position]);count.setText(""+counts[position]);// 改变item的背景if(position%2 == 0){view.setBackgroundColor(Color.WHITE);}else{view.setBackgroundColor(Color.GRAY);}return view;}}@Override/*** 响应listview 条目点击事件*/public void onItemClick(AdapterView<?> parent, View view, int position,long id) {Intent intent = new Intent(this,FolderDetail.class);intent.putExtra("position", position);startActivity(intent);}}
- 每个条目判断和上一个条目是否是同一天,不是显示,是隐藏,但是会不停的判读
- 在获取日期信息的时候保存到集合,不是同一天就保存,用第二种,缺点一次性全部取出效率不高

public class FolderDetail extends Activity implements OnClickListener{private ListView listView;/*** 在文件夹页面,点击listView的位置*/private int position;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);position = getIntent().getIntExtra("position", 0);setContentView(R.layout.activity_folder_detail);findViewById(R.id.btn_send).setOnClickListener(this);listView = (ListView) findViewById(R.id.lv_folder_detail);adapter = new FolderDetailListAdapter(this, null);listView.setAdapter(adapter);showPositionSet = new HashSet<Integer>();prepareData();}/*** 要查询的列*/private String[] projection={"body","_id","address","date"};/*** 短信内容所在列的索引值 为 0*/private final int INDEX_BODY = 0;/*** 短信联系人电话所在列的索引值 为 3*/private final int INDEX_ADDRESS = 2;/*** 短信日期所在列的索引值 为 4*/private final int INDEX_DATE = 3;private void prepareData() {MyQueryHandler myQueryHandler =new MyQueryHandler(getContentResolver());myQueryHandler.startQuery(99, adapter, Tools.getUriFromIndex(position),projection, null, null, " date desc");myQueryHandler.setOnCursorChangedListener(new MyQueryHandler.IOnCursorChangedListener() {@Overridepublic void onCursorChanged(int token, Object cookie, Cursor cursor) {//遍历curosr 将需要显示标题的条目的位置,保存在 showPositionSetcursor.moveToPosition(-1);// 将cursor 移动到-1 的位置,方便遍历cursorshowPositionSet.clear(); // 清空集合long lastDay=0;long thisDay=0;while(cursor.moveToNext()){thisDay=cursor.getLong(INDEX_DATE);if(!isSameToday(lastDay, thisDay)){ // 如果二个时间表示的不是同一天// 将当前cursor 的行数,保存至集合showPositionSet.add(cursor.getPosition());}lastDay = thisDay;}// 刷新listViewadapter.notifyDataSetChanged();}});}/*** @return true 如果 二人长型数字,表示的是同一天*/public boolean isSameToday(long lastDay,long thisDay) {Time time = new Time();time.set(lastDay);int thenYear = time.year;int thenMonth = time.month;int thenMonthDay = time.monthDay;time.set(thisDay);return (thenYear == time.year)&& (thenMonth == time.month)&& (thenMonthDay == time.monthDay);}/*** 应该显示标题的位置的集合*/private HashSet<Integer> showPositionSet;private FolderDetailListAdapter adapter ;class FolderDetailListAdapter extends CursorAdapter{public FolderDetailListAdapter(Context context, Cursor c) {super(context, c);}@Overridepublic View newView(Context context, Cursor cursor, ViewGroup parent) {View view = View.inflate(context, R.layout.list_item_folder_detail, null);FolderDetailViewHolder vh = new FolderDetailViewHolder();vh.title = (TextView) view.findViewById(R.id.tv_title_list_item);vh.face = (ImageView) view.findViewById(R.id.iv_face_list_item);vh.address = (TextView) view.findViewById(R.id.tv_address_list_item);vh.body = (TextView) view.findViewById(R.id.tv_body_list_item);vh.date = (TextView) view.findViewById(R.id.tv_date_list_item);view.setTag(vh);return view;}@Overridepublic void bindView(View view, Context context, Cursor cursor) {FolderDetailViewHolder vh = (FolderDetailViewHolder) view.getTag();//TODO//设置短信内容vh.body.setText(cursor.getString(INDEX_BODY));//设置时间long when = cursor.getLong(INDEX_DATE);String dateStr;if(DateUtils.isToday(when)){dateStr = DateFormat.getTimeFormat(context).format(when);}else{dateStr = DateFormat.getDateFormat(context).format(when);}vh.date.setText(dateStr);//设置联系人的名String number = cursor.getString(INDEX_ADDRESS);String name = Tools.findNameByNumber(context, number);if(name == null){//无此联系人vh.address.setText(number);}else{vh.address.setText(name);}// 设置头像int contactId = Tools.findIDByNumber(context, number);if(contactId == -1){ // 无此联系人vh.face.setBackgroundResource(R.drawable.ic_unknow_contact_picture);}else{Bitmap bitmap = Tools.getFaceById(context, ""+contactId);if(bitmap ==null){//联系人,无头像vh.face.setBackgroundResource(R.drawable.ic_contact_picture);}else{vh.face.setBackgroundDrawable(new BitmapDrawable(bitmap));}}// 设置标题if(showPositionSet.contains(cursor.getPosition())){ // 如果集合中包含此行,那么,就显示标题 ,vh.title.setText(DateFormat.getDateFormat(context).format(when));vh.title.setVisibility(View.VISIBLE);}else{// 否则,就隐藏标题vh.title.setVisibility(View.GONE);}}}class FolderDetailViewHolder{public TextView title;public ImageView face;public TextView address;public TextView body;public TextView date;}@Override/*** 响应新建信息的点击事件*/public void onClick(View v) {Intent intent = new Intent(this,NewMessageUI.class);startActivity(intent);}}
6.listview显示不用条目的更多相关文章
- ListView显示Sqlite的数据美化版与性能优化
在上一篇文章中,我们已经实现在listview显示数据库内容的.但是我们listview中,排版不是很好看,所以这篇文章呢,我们来对listveiw进行美化.哈哈,说白了,就是对listview添加一 ...
- ListView---复杂的listview显示
1 . 初始化数据 private void fillData() { ll_loading.setVisibility(View.VISIBLE); // 显示进度 new Thread() { p ...
- 转 wince程序 中使用Listview显示图标问题 (C#) .
思路: 1.窗体控件:lstaqgl [Listview控件名称] imageList1[ImageList控件] 2. 图片路径添加到—imageList1——Listview显示图片从 ima ...
- listview 点击条目 自动置顶或者自动置底部
关于Listview点击条目,自动滑动到点击条目实现: map_searchresult_list.post(new Runnable() { @Override public void run() ...
- Android在ListView显示图片(重复混乱闪烁问题)
Android在ListView显示图片(重复混乱闪烁问题) 1.原因分析 ListView item缓存机制: 为了使得性能更优,ListView会缓存行item(某行相应的View). ListV ...
- ScrollView嵌套ListView显示不完全、嵌套TextView不能滚动解决办法
目录: 一.情景说明 二.最初做法 三.解决办法 一.情景说明 1.情景 最近项目刚好有一个需求,需要在一个界面中用ScrollView嵌套一个滚动的TextView和一个listView ...
- android listView多层嵌套listView显示不全问题
最近在做项目,需要用到listVIew多层嵌套listVIew的需求,先发现已下两个处理办法比较好用 第一种: public class ListViewNesting extends ListVie ...
- 解决ScrollView中包含ListView,导致ListView显示不全
ScrollView 中包含 ListView 的问题 : ScrollView和ListView会冲突,会导致ListView显示不全 <?xml version="1.0" ...
- Android 自定义 ListView 显示网络上 JSON 格式歌曲列表
本文内容 环境 项目结构 演示自定义 ListView 显示网络上 JSON 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
随机推荐
- 【转】RabbitMQ基础——和——持久化机制
这里原来有一句话,触犯啦天条,被阉割!!!! 首先不去讨论我的日志组件怎么样.因为有些日志需要走网络,有的又不需要走网路,也是有性能与业务场景的多般变化在其中,就把他抛开,我们只谈消息RabbitMQ ...
- ROS零门槛学渣教程系列前言
为什么选择ROS: 1.ROS是开放源码的,在该平台上可以找到非常很多免费开源的代码包,并且这些例程还带wiki说明文档: 2.机器人领域最新的算法直接支持ROS,简单几个步骤就能运行: 3.ROS工 ...
- Centos7 出现Welcome to emergency mode!
做mount挂载时,修改了 /etc/fstab 文件,导致Centos7重启时出现如下图所示错误: Welcome to emergency mode! After logging in, typ ...
- 安装mysql后,sql语句中表名区分大小写的问题
今天安装完mysql后,执行查询语句select * from user,结果报user表不存在,但是实际是存在的,查了一下才知道是因为mysql的my.cnf文件中少了一个大小写敏感的配置,若不配置 ...
- c#gridcontrol 的一些设置
1:单元格变色,当鼠标点击到单元格的时候, 可能我们是想选择整个行,而此时gridview 默认设置是点击单元格整个行变色,这个点击的单元格变白色, 整行选择感觉有断层 于是和可以这么设置 设置Gri ...
- Bar 柱状图
1.生成基本图形 向上向下分别生成12个数据,X为 0 到 11 的整数 ,Y是相应的均匀分布的随机数据. 使用的函数是plt.bar,参数为X和Y: import matplotlib.pyplot ...
- filter 全局和局部过滤器
1,局部过滤器 2,全局过滤器 使用方法相同,在花括号中使用过滤器名或者v-bind中使用
- java用POI操作excel——随便写一下,最基础的东西
前两天部门实施在做一个东西,需要把客户放在Excel中的数据导入到Oracle数据库中,我就想着直接写一个模板,必要的时候改一下实体类应该可以解放实施同事的双手,不过在实际写的过程中,还是碰到很多问题 ...
- JAVA值类型和引用类型的区别
java这两种数据类型分别有哪些? java 中的数据类型分为两大类:值类型(基本数据类型)和引用类型(复合数据类型) 一:值类型: 整数类型(byte,short,int,long) 浮点类 ...
- windbg排查大内存
现在都是用windbg preview,安装比较麻烦了,还要配置环境变量, 并且每次分析前要先执行 !analyze - v !eeheap -gc !DumpHeap -min 500 000002 ...