您的位置:首页 > 其它

【listview】pinned-section-listview应用 + 两种布局的listview

2015-07-27 11:09 316 查看
安卓手机的手机联系人的listview的滑动字母顶在顶部的效果,qq客户端联系人的效果也是这样。

github地址:https://github.com/beworker/pinned-section-listview

点击


下载后,里面的PinnedSectionListView.java就是要用的listview啦。

在他的github主页往下看,


Usage

这块就是用法啦。

第一点就是在布局文件用com.hb.views.PinnedSectionListView代替安卓自带的listview咯。
第二点:
自己写的
ListAdapter
 ,要实现PinnedSectionListAdapter接口。
实现接口后,要重写isItemViewTypePinned方法,此处注释为:

// We implement this method to return 'true' for all view types we want to pin

意思是,要pin的行,该方法要返回true。(eg联系人的ABCD..字母行)

===========================================================================

接下来是两种布局的listview,此处借鉴:http://blog.csdn.net/wanghao200906/article/details/41693859?utm_source=tuicool 处的代码:

public class PlayAdapter extends BaseAdapter {
/**
* 标题的item
*/
public static final int ITEM_TITLE = 0;
/**
* 二级菜单的item
*/
public static final int ITEM_INTRODUCE = 1;
private List<ViewItem> mList;
private Context context;

private LayoutInflater inflater;

// 两个样式 两个holder
class Holder1 {
TextView play_title;

Holder1(View view) {
play_title = (TextView) view.findViewById(R.id.play_title);
}

}

class Holder2 {
TextView play_introduce_title;
ImageView play_iv;

Holder2(View view) {
play_introduce_title = (TextView) view
.findViewById(R.id.play_introduce_title);
play_iv = (ImageView) view.findViewById(R.id.play_iv);
}
}

public PlayAdapter(Context context, List<ViewItem> mList) {
this.context = context;
this.mList = mList;
inflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
System.out.println("mList.size()" + mList.size());
return mList.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return mList.get(arg0);
}
//返回 代表某一个样式 的 数值
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
return mList.get(position).type;
}

//两个样式 返回2
@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);

Holder1 holder1 = null;
Holder2 holder2 = null;
System.out.println("getView " + position + " " + convertView
+ " type = " + type);
if (convertView == null) {
//选择某一个样式。。
switch (type) {
case ITEM_TITLE:
convertView = inflater.inflate(R.layout.play_item_title, null);
holder1 = new Holder1(convertView);

holder1.play_title.setText(mList.get(position).name);

convertView.setTag(holder1);
break;
case ITEM_INTRODUCE:
convertView = inflater.inflate(R.layout.paly_item_introduce,
null);
holder2 = new Holder2(convertView);

holder2.play_introduce_title
.setText(mList.get(position).address);
convertView.setTag(holder2);
break;
default:
break;
}
} else {
switch (type) {
case ITEM_TITLE:
holder1 = (Holder1) convertView.getTag();
holder1.play_title.setText(mList.get(position).name);
break;
case ITEM_INTRODUCE:
holder2 = (Holder2) convertView.getTag();
holder2.play_introduce_title
.setText(mList.get(position).address);
break;

default:
break;
}

}

return convertView;
}

}


在此基础上加isItemViewTypePinned方法:
/*
* PinnedSectionListAdapter#isItemViewTypePinned(int) This method must
* return true for all view types which have to be pinned.
* 确定哪个item是title,当item为需要固定的title时,返回true。
*/
@Override
public boolean isItemViewTypePinned(int viewType) {
// TODO Auto-generated method stub
return (viewType == 1 ? true : false);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: