StickyListHeadersListView的使用

来源:互联网 发布:c wpf 数据绑定 编辑:程序博客网 时间:2024/05/17 00:28
  • 先上图
    这里写图片描述

  • 布局文件

<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;    }}
0 0
原创粉丝点击