关于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);
发布了37 篇原创文章 · 获赞 15 · 访问量 5561
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览