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;
@Override
protected 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() {
@Override
public void onCursorChanged(int token, Object cookie, Cursor cursor) {
//移动至第一行
cursor.moveToFirst();
// 获得短信的个数
int count = cursor.getInt(0); // 仅查询 短信的条数,仅返回一列
// 以 token 为counts的下标,存短信个数
counts[token] = count;
//刷新listView
adapter.notifyDataSetChanged();
}
});
}
private FolderListAdapter adapter;
class FolderListAdapter extends BaseAdapter{
@Override
public int getCount() {
return names.length;
}
@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) {
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;
@Override
protected 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() {
@Override
public void onCursorChanged(int token, Object cookie, Cursor cursor) {
//遍历curosr 将需要显示标题的条目的位置,保存在 showPositionSet
cursor.moveToPosition(-1);// 将cursor 移动到-1 的位置,方便遍历cursor
showPositionSet.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;
}
// 刷新listView
adapter.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);
}
@Override
public 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;
}
@Override
public 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 歌曲列表 参考资料 本文最开始看的是一个国人翻译的文章,没有源代码可下载,根据文中提供的代码片段,自己新建的项目(比较可恶 ...
随机推荐
- XWIKI离线WAR包部署(LDAP登录)
背景 接任务部署一个wiki, 要求: java语言开发, 开源, 内网部署; 需要支持: 大文件上传(300m左右), 所见即所得(wycwyg), 导出, LDAP, 评论与权限. 通过一个好用的 ...
- window下mongodb的安装和环境搭建
一.下载安装包或者压缩包 1.下载 mongodb官网社区版下载页面 开发者一般使用社区版即可 3.6.3版本仅支持64位版本 2.安装 mongo compass是一个图形界面管理工具,安装过程非常 ...
- Spring in Action 第一章 Spring之旅
1.1 简化Java开发 1.1.2 依赖注入(DI) 松耦合:如果一个对象只通过接口(而不是具体实现或初始化过程)来表明依赖关系,那么这种依赖就能在对象本身毫不知情的情况下,用不同的具体实现进行替代 ...
- mactype配置
配合 Firefox 小小设置(改了好多配置,似乎主要是修改了渲染的核心?是叫这个么?把那个Siera?删掉了,就好了)后,效果极佳,我在原有配置的基础上,加大了字重,显示更粗,更明显. 这里是原配置 ...
- NOVO SOP (SOP简介及历史)
SOP(Standard Operation Procedure),标准作业程序. 一.什么是SOP(标准作业程序) 所谓SOP,是 Standard Operation Procedure三个单词中 ...
- gitlab简介与配置
版本控制介绍 版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么 ...
- python 基础———— 字符串常用的调用 (图)
Python 常用的 字符串调用方法 这里用到了pycharm ( 使用Python 有力的工具) 下载地址https://www.jetbrains.com/pycharm/download/#s ...
- pip install cv2报错
pip install cv2 安装cv2报错: Could not find a version that satisfies the requirement cv2 (from versions: ...
- uni-app 点击切换图标
前端代码: <template> <view> <image src="../../static/pari/buxihuan.png" v-show= ...
- redis学习-string常用命令
keys * :查询所有的key值 set:为指定键设置对应的值 get:获取指定键的值 mset:一次传入多个键值对 mget:一次获取多个键的值 del:删除指定键 strlen:获取指定键值的长 ...