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 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
随机推荐
- 【每日更新】【Redis学习】
5. Redis订阅和发布模式和Redis事务 -------------------Redis事务------------------- 1.概念: redis中的事务是一组命令的集合.事务 ...
- Python-docx 读取word.docx内容
第一次写博客,也不知道要写点儿什么好,所以就把我在学习Python的过程中遇到的问题记录下来,以便之后查看,本人小白,写的不好,如有错误,还请大家批评指正! 中文编码问题总是让人头疼,想要用Pytho ...
- Codeforces 1083C Max Mex
Description 一棵\(N\)个节点的树, 每个节点上都有 互不相同的 \([0, ~N-1]\) 的数. 定义一条路径上的数的集合为 \(S\), 求一条路径使得 \(Mex(S)\) 最大 ...
- rabbit基本原理 转
https://www.cnblogs.com/jun-ma/p/4840869.html
- JS的深浅拷贝
项目中根据各种需求或多或少会需要用到拷贝,通过查询整理之后今天简单的记录一下. 我们可以利用 slice.concat 返回一个新数组的特性可以实现数组的拷贝. var arr = ['a', 1, ...
- VB编程中的“Abs”是什么意思?
c = Val(Text1.Text) '将Text1中的值赋给cIf c = Abs(a - b) Then 'Abs(a - b)是a和b间的差(正数),判断c是否等于该差值f = f + 10 ...
- linux下安装srilm
1.安装相关依赖库 a.c/c++ compiler:编译器gcc 3.4.3及以上版本 b.GNU make:构建和管理工程的工具,解释Makefile里的指令,描述了整个工程所有文件的编译顺序 ...
- Springboot & Mybatis 构建restful 服务三
Springboot & Mybatis 构建restful 服务三 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务二 2 restful ...
- Vue的双向数据绑定
最简单的实现v-model数据绑定,只需要在一个组件里面有个props,加上一个value,然后当组件要去修改数据的时候, $emit一个input事件,并且把新的值传出去.这就实现了Vue里面的数据 ...
- SCUCTF2018web部分wp
[签到] Web部分的签到题,打开连接后F12审查元素 可以看到有被隐藏起来的JSFuck密码,解码运行后可得flag [计算器] 打开后界面如上图,要求简单来说就是回答20道数学题目,每道题最多3s ...