demo演示:
github地址:https://github.com/emilsjolander/StickyListHeaders
添加依赖:
compile 'se.emilsjolander:stickylistheaders:2.7.0'
布局:
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
android:id="@+id/shlv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</se.emilsjolander.stickylistheaders.StickyListHeadersListView>
代码:
-找到stickylistheaders控件
-添加适配器:
public class StickyListHeadersActivity extends Activity {
@InjectView(R.id.shlv)
StickyListHeadersListView shlv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sticky_header);
ButterKnife.inject(this);
MyStickyListHeadersAdapter adapter = new MyStickyListHeadersAdapter();
shlv.setAdapter((StickyListHeadersAdapter) adapter);
}
/**
* 适配器
* 小技巧:直接实现StickyListHeadersAdapter需要实现很多方法
* 但是extends BaseAdapter implements StickyListHeadersAdapter就少些很多方法
*/
class MyStickyListHeadersAdapter extends BaseAdapter implements StickyListHeadersAdapter {
private long groupOne = 1;//第一组
private long groupTwo = 2;//第二组
//返回元素个数,标题不算是元素
@Override
public int getCount() {
return 40;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return 0;
}
//listview布局
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ViewHolder holder = null;
if (convertView == null) {
view = View.inflate(parent.getContext(), R.layout.item_goods, null);
holder = new ViewHolder(view);
view.setTag(holder);
} else {
view = convertView;
holder = (ViewHolder) view.getTag();
}
holder.tvTitle.setText("商品" + position);
return view;
}
//标题布局
@Override
public View getHeaderView(int position, View convertView, ViewGroup parent) {
return View.inflate(parent.getContext(), R.layout.item_outteradapter, null);
}
//返回的id有几个就产生几个分组,每个分组都会生成一个标题布局getHeaderView()
@Override
public long getHeaderId(int position) {
//前15个元素为一组,后面的全部元素为一组
if (position <= 15) {
return groupOne;
} else {
return groupTwo;
}
}
class ViewHolder {
@InjectView(R.id.tv_title)
TextView tvTitle;
ViewHolder(View view) {
ButterKnife.inject(this, view);
}
}
}
}