先上图
布局文件
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.simple.headview.MainActivity">
<se.emilsjolander.stickylistheaders.StickyListHeadersListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
- Activity类
public class MainActivity extends AppCompatActivity
{
private StickyListHeadersListView lv;
private HeadAdapter adapter;
private List<ItemBeam> list;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (StickyListHeadersListView) findViewById(R.id.lv);
//添加数据
list = new ArrayList<ItemBeam>();
for (int i = 0; i < 10; i++)
{
ItemBeam bean = new ItemBeam();
bean.setValue("bb");
list.add(bean);
}
for (int i = 0; i < 10; i++)
{
ItemBeam bean = new ItemBeam();
bean.setValue("aa");
list.add(bean);
}
for (int i = 0; i < 13; i++)
{
ItemBeam bean = new ItemBeam();
bean.setValue("dd");
list.add(bean);
}
for (int i = 0; i < 17; i++)
{
ItemBeam bean = new ItemBeam();
bean.setValue("cc");
list.add(bean);
}
//设置id,为了能够获取head的id
int headId = 0;
Map<String, Integer> map = new HashMap<>();
for (ItemBeam bean2 : list)
{
String value = bean2.getValue();
if (!map.containsKey(value))//如果这个实体对象在map里面没有这个value对应的key,就给实体对象
{ //设置id,并存到map中
bean2.setId(headId);
map.put(value, headId);
headId++;
} else
{//如果有就直接设置id,这样不同的实体对象就对应不同的id
bean2.setId(map.get(value));
}
}
//排序
Collections.sort(list, new Comparator<ItemBeam>()
{
@Override
public int compare(ItemBeam lhs, ItemBeam rhs)
{
return lhs.getValue().compareTo(rhs.getValue());
}
});
adapter = new HeadAdapter(this, list);
lv.setAdapter(adapter);
}
}
- 适配器类
public class HeadAdapter extends BaseAdapter implements StickyListHeadersAdapter
{
private Context ctx;
private List<ItemBeam> list;
public HeadAdapter(Context context , List<ItemBeam> list){
this.ctx = context;
this.list = list;
}
//初始化head布局,这里只是为了实现功能,项目中还是要用ViewHolder封装下更节约资源
@Override
public View getHeaderView(int position, View convertView, ViewGroup parent)
{
TextView tv = new TextView(ctx);
tv.setText(list.get(position).getValue());
tv.setBackgroundColor(Color.RED);
return tv;
}
//获取headView的id
@Override
public long getHeaderId(int position)
{
return list.get(position).getId();
}
@Override
public int getCount()
{
return list.size();
}
@Override
public Object getItem(int position)
{
return list.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
//这里只是为了实现功能,项目中还是要用ViewHolder封装下更节约资源
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
TextView tv = new TextView(ctx);
tv.setText(list.get(position).getValue());
return tv;
}
}
- 实体类
public class ItemBeam
{
private String value;
private int id;
public void setId(int id)
{
this.id = id;
}
public void setValue(String value)
{
this.value = value;
}
public String getValue()
{
return value;
}
public int getId()
{
return id;
}
}