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 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
随机推荐
- 使用fiddler模拟session失效的测试方法
1.Fiddler的基本界面 2.json串放入本地txt文件中 例如, test.txt: {"retCode": "200","Msg" ...
- Dockerfile制作自定义镜像
本文介绍最精简的Dockerfile文件构建镜像,Docker启动的时候可以启动一个shell脚本 1.首先编写Dockerfile文件 说明 1.启动的这个shell脚本一定是不退出的,比如服务器的 ...
- Idea搭建SpringMVC框架(初次接触)
公司转Java开发,做的第一个项目是SpringMVC框架,因为底层是同事封装,等完成整个项目,对SpringMVC框架的搭建还不是很了解,所以抽时间不忙的时候自己搭建了一个SpringMVC框架. ...
- 【转】异步编程 In .NET
概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...
- Python+Selenium 利用ID,XPath,tag name,link text,partial link text,class name,css,name定位元素
使用firefox浏览器,查看页面元素,我们以“百度网页”为示例 一.ID定位元素 利用find_element_by_id()方法来定位网页元素对象 ①.定位百度首页,输入框的元素 ②.编写示 ...
- XBee PRO 900HP远距离无线模块
XBee PRO S3B也称为XBee-900HP无线模块,它是一款工作在频段900~928MHz之间,基于FHSS跳频技术的远距离无线数传电台核心模块.常用型号如下: 类别 型号 开发套件 XKB9 ...
- 关于get和post请求的区别
1.标准答案 GET在浏览器回退时是无害的,而POST会再次提交请求. GET产生的URL地址可以被Bookmark,而POST不可以. GET请求会被浏览器主动cache,而POST不会,除非手动设 ...
- python将文本转化成语音并播放
一.问题 在学习的过程中,我们会涉及到将文本信息,转化成语音的过程,比如:我爬取了一个小说的网站,我要将里面的内容进行语音处理.目前能够进行语音的方法还是很多,比如win32com,百度ai. 二.解 ...
- linux 挂载ntfs格式的硬盘
一.安装ntfs 1.下载 sudo wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz 2.解压 sudo tar ...
- openmp入门总结
Ref: https://wdxtub.com/2016/03/20/openmp-guide/ 简介 这门课作为 ECE 中少有的跟计算机科学相关的课,自然是必上不可.不过无论是 OpenMP 还是 ...