Android ListView 分类

从今天起,用此博客来记录自己学Android的一点一滴。

第一篇ListView分组,就是每一组有个标题,并且标题的是不可按。

先看效果图



网上的实现方法很多,归根到底是重写Adatper里getView(),判断该项是组名,还是子项,然后返回不同view就可以了。自认为重写BaseAdapte的getItemViewType和getViewTypeCount即可。附上代码

MyAdapter

public class MyAdapter extends BaseAdapter {

    public static final int TYPE_COUNT = 2;
    public static final int ITEM = 0;
    public static final int GROUP = 1;
    private Context mContext;
    private List<Category> mList;

    public MyAdapter() {

    }

    public MyAdapter(Context context, List list) {
        this.mList = list;
        this.mContext = context;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public int getItemViewType(int position) {
        if (mList == null) {
            return ITEM;
        }
        if (mList.get(position).isGroup()) {
            return GROUP;
        } else {
            return ITEM;
        }
    }

    @Override
    public int getViewTypeCount() {
        return TYPE_COUNT;
    }

    @Override
    public Object getItem(int i) {
        return mList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public boolean isEnabled(int position) {
        // 如果是该项是组名,就设置false,不能点
        return mList.get(position).isGroup()? false : true;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder;
        LayoutInflater inflater = LayoutInflater.from(mContext);
        switch (getItemViewType(i)) {
            case ITEM:
                if (view == null) {
                    view = inflater.inflate(R.layout.list_item, viewGroup, false);
                    viewHolder = new ViewHolder();
                    viewHolder.textView = (TextView) view.findViewById(R.id.item_txt);
                    view.setTag(viewHolder);
                } else {
                    viewHolder = (ViewHolder) view.getTag();
                }
                viewHolder.textView.setText(mList.get(i).getName());
                viewHolder.textView.setTextColor(Color.BLACK);
                break;
            case GROUP:
                if (view == null){
                    view = inflater.inflate(R.layout.group_item, viewGroup,false);
                    viewHolder = new ViewHolder();
                    viewHolder.textView = (TextView)view.findViewById(R.id.group_txt);
                    view.setTag(viewHolder);
                }else {
                    viewHolder = (ViewHolder) view.getTag();
                }
                viewHolder.textView.setText(mList.get(i).getName());
                viewHolder.textView.setBackgroundColor(Color.LTGRAY);
                viewHolder.textView.setTextColor(Color.BLUE);
                break;
        }
        return view;
    }

    class ViewHolder {
        TextView textView;
    }
}

MainActivity

public class MainActivity extends ActionBarActivity {
    private ListView listView;
    private List<Category> mList;
    private Context mContext;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        getData();
        listView = (ListView)findViewById(R.id.listview);
        listView.setAdapter(new MyAdapter(mContext, mList));
        listView.setOnItemClickListener(new MyItemClickListener());

    }
    class MyItemClickListener implements ListView.OnItemClickListener{
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Toast.makeText(mContext, mList.get(i).getName(), Toast.LENGTH_SHORT).show();
        }
    }

    private void getData(){
        mList = new ArrayList<Category>();
        Category category = new Category("A", true);
        mList.add(category);
        for(int i = 0; i < 3; i++){
            category = new Category("" + i, false);
            mList.add(category);
        }
        category = new Category("B", true);
        mList.add(category);
        for(int i = 0; i < 3; i++){
            category = new Category("" + i, false);
            mList.add(category);
        }
        category = new Category("C", true);
        mList.add(category);
        for(int i = 0; i < 3; i++){
            category = new Category("" + i, false);
            mList.add(category);
        }

    }
}
数据类Category

public class Category {
    private boolean isGroup;
    private String name;


    public Category(String name, boolean isGroup){
        this.isGroup = isGroup;
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setGroup(boolean isGroup) {
        this.isGroup = isGroup;
    }

    public boolean isGroup() {
        return isGroup;
    }
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值