前言
此篇文章利用StickyListHeadersListView和自定义view的方式实现所需效果,所以此篇文章的重点有两个方面,一是介绍StickyListHeadersListView的使用,二则为介绍字母检索的实现方式。其实技术含量不是很高,就算是记录一下吧
实现思路
本来字母检索打算用listview展示,但是网上查了一通资料后发现基本上都是使用的自定义view展示,想也对,字母检索会被频繁的刷新,如果用listview的话,感觉太重了。
效果图
实现功能点
粘性显示
字母栏显示的只是主数据中含有的字母项
主数据滑动,字母栏跟着滑到相应的字母
点击字母栏定位到主数据的那一字母族的第一个数据
实现步骤
1.使用StickyListHeadersListView呈现基本数据
mListView = (StickyListHeadersListView) findViewById(R.id.id);
mAdapter = new Adapter(this, datas,letterdata);
mListView.setAdapter(mAdapter);
复制代码
2.ListView的adapter展示
public class Adapter extends BaseAdapter implements StickyListHeadersAdapter {
private List countries;
private LayoutInflater inflater;
private String chars;//字母栏中所有字母的字符串,为了拿到字母的位置
public AreaInfoAdapter(Context context, List countries, List letterdata) {
inflater = LayoutInflater.from(context);
this.countries = countries;
chars = ListToString(letterdata);
}
@Override
public int getCount() {
return countries.size();
}
@Override
public Object getItem(int position) {
return countries.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.l