android实现分组字母索引显示的listview
2013-05-15 11:59
676 查看
最近项目中有一个通讯录的模块,为了使体验效果更佳,和系统通讯录一样可以分组索引,于是自己用framlayout,嵌套listview和分组索引的布局方式实现的
我的代码中,写了两个界面实现,其中一个是添加对象list,另一个是string数组用到了排序,具体逻辑也不一样,我推荐使用前者;
先贴张效果图;
最后我把代码贴上点击下载:我这种方式实现虽然跟大牛写的不一样,但是基本功能实现了就行
我的代码中,写了两个界面实现,其中一个是添加对象list,另一个是string数组用到了排序,具体逻辑也不一样,我推荐使用前者;
先贴张效果图;
package com.allen.indexablelist; import java.util.HashMap; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; /** 实现Filterable接口,编写过滤规则 */ public class NoteBookadapter extends BaseAdapter { private Context ctx; private ViewHolder holder; List<NoteBookItem> list; Map<String, Integer> selector;//键值是索引表的字母,值为对应在listview中的位置 /** 字母表 */ String index[]; public NoteBookadapter(Context context, List<NoteBookItem> list, String[] index) { this.ctx = context; this.list = list; this.index = index; selector = new HashMap<String, Integer>(); for (int j = 0; j < index.length; j++) {// 循环字母表,找出list中对应字母的位置 for (int i = 0; i < list.size(); i++) { if (list.get(i).index.equals(index[j].toLowerCase())) selector.put(index[j], i); } } } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return list.get(arg0); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { try { if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.from(ctx).inflate( R.layout.note_item, null); holder.tv1 = (TextView) convertView.findViewById(R.id.tv1); holder.tv2 = (TextView) convertView.findViewById(R.id.tv2); holder.iv = (ImageView) convertView.findViewById(R.id.iv_phone); holder.tv3 = (TextView) convertView.findViewById(R.id.tv3); holder.layout = convertView.findViewById(R.id.layout); holder.index = (TextView) convertView .findViewById(R.id.tv_index); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // 绑定数据 NoteBookItem item = list.get(position); holder.tv1.setText(item.name); if (item.number.equals("null")) holder.tv2.setText(item.mobile); else holder.tv2.setText(item.number); holder.tv3.setText(item.call); // 显示index String currentStr = item.index; // 上一项的index String previewStr = (position - 1) >= 0 ? list.get(position - 1).index : " "; /** * 判断是否上一次的存在 */ if (!previewStr.equals(currentStr)) { holder.index.setVisibility(View.VISIBLE); holder.index.setText(currentStr);//中奖提示的文本显示当前滑动的字母 } else { holder.index.setVisibility(View.GONE); } } catch (OutOfMemoryError e) { Runtime.getRuntime().gc(); } catch (Exception ex) { // handler.sendEmptyMessage(CommonMessage.PARSE_ERROR); ex.printStackTrace(); } return convertView; } class ViewHolder { ImageView iv; TextView tv1; TextView tv2; TextView tv3; View layout; /** 索引字母 */ TextView index; } public Map<String, Integer> getSelector() { return selector; } public void setSelector(Map<String, Integer> selector) { this.selector = selector; } public String[] getIndex() { return index; } public void setIndex(String[] index) { this.index = index; } }
最后我把代码贴上点击下载:我这种方式实现虽然跟大牛写的不一样,但是基本功能实现了就行
相关文章推荐
- [转]android实现分组字母索引显示的listview
- android实现分组字母索引显示的listview
- android实现分组字母索引显示的listview
- android实现分组字母索引显示的listview
- android之ListView分组及字母索引导航
- Android中ListView实现多级分组显示的高效实现
- Android ListView侧边字母索引栏SideBar控件的实现
- android之ListView分组及字母索引导航(2)重构-接口
- Android ListView的分组显示,分组标题悬浮,点击查看分组的功能实现
- 快速集成android实现listview的字母A-Z排序,界面侧边字母索引
- 快速集成android实现listview的字母A-Z排序,界面侧边字母索引
- Android UI ListView实现字母索引 定位
- android字母索引实现ListView定位
- Android实现ListView显示信息,点击每个item,跳转到相应界面
- Android 长按Listview显示CheckBox,实现批量删除
- Android 自定义 View 实现通讯录字母索引(仿微信通讯录)
- Android个人学习笔记之ListView知识应用-仿IOS百度云条目点击显示菜单模块实现
- Android 仿联系人列表 实现ListView的A-Z字母排序和过滤搜索功能,并挤压效果
- Android采用ListView实现数据列表显示
- 利用tableView分组实现省份各个城市的分组,利用首字母作为索引