关于listView多条目的使用

一.多条目与listview进行对比

  • 其实多条目listview和listview的使用有很多相似处,但是也有不同的地方
  • 相同点:同样(找到控件设置数据再设置BaseAdapter适配器然后赋值开启适配器)
  • 不通点:多条目需要在适配器里边多写两个方法

注意OneType和TwoType必须从0开始
在这里插入图片描述
还有实例化控件的时候是多种布局
在这里插入图片描述
二.编程思想

  • 在布局里边添加listview控件
  • 找到控件
  • 设置数据并开启写出BaseAdapter适配器
  • 在适配器里边多实现两个方法
  • 然后再设置多个条目区分(在这里注意一点:有几种条目类型就设置几种)
  • 在引用多种布局和里边的控件进行赋值
  • 最后开启适配器就可以了
    三.代码的实现
    找到控件并提成全局变量
    lv = findViewById(R.id.listview);

适配器

class MyBase extends BaseAdapter{
        //设置两种不同的条目区
        private static final int OneType = 0;
        private static final int TwoType = 1;
        //设置条目类型
        @Override
        public int getItemViewType(int position) {
            return (int) list.get(position).getGroup_id();
        }
        //设置使用布局的数量
        @Override
        public int getViewTypeCount() {
            return 2;
        }

        private List<Bean.DataBean.PcFeedFocusBean> list;
		//传数据
        public MyBase(List<Bean.DataBean.PcFeedFocusBean> list) {
            this.list = list;
        }

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

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

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

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            //注意一下只能用本id下的text
            long id = list.get(i).getGroup_id();
            //判断数据如果是基数就使用第一种条目类型
            if(id % 2 == OneType){
                MyOneView omv;
                if(view == null){
                    omv = new MyOneView();
                    view = View.inflate(MainActivity.this, R.layout.show_item_one, null);
                    omv.item_one_text = view.findViewById(R.id.item_one_text);
                    omv.item_one_img = view.findViewById(R.id.item_one_img);
                    view.setTag(omv);
                }else{
                    omv = (MyOneView) view.getTag();
                }
                //进行赋值
                omv.item_one_text.setText(list.get(i).getTitle()+"");
            }else if(id % 2 == TwoType){ //如果是偶数就使用第二种条目类型
                MyTwoView tmv;
                if(view == null){
                    tmv = new MyTwoView();
                    view = View.inflate(MainActivity.this, R.layout.show_item_two, null);
                    tmv.item_two_text = view.findViewById(R.id.item_two_text);
                    tmv.item_two_img = view.findViewById(R.id.item_two_img);
                    view.setTag(tmv);
                }else{
                    tmv = (MyTwoView) view.getTag();
                }
                //赋值
                tmv.item_two_text.setText(list.get(i).getTitle()+"");
            }
            //返回view
            return view;
        }

        //第一种布局实例化控件
        class MyOneView{
            public TextView item_one_text;
            public ImageView item_one_img;
        }
        //第二种布局实例化控件
        class MyTwoView{
            public TextView item_two_text;
            public ImageView item_two_img;
        }
    }

开启适配器

			//拿到数据
            List<Bean.DataBean.PcFeedFocusBean> list = bean.getData().getPc_feed_focus();
            //在这里将数据传入到适配器以便于赋值
            MyBase base = new MyBase(list);
            lv.setAdapter(base);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值