ListView多条目加载

本文介绍了一个使用Android支持库v7中的AppCompatActivity创建的简单应用案例,该应用通过自定义BaseAdapter来实现不同类型的ListView项显示。文章详细展示了如何根据数据类型设置不同的视图布局,并对ViewHolder模式进行了优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.example.mylistview.JAVABean.Goods;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    String uriString = "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page=1";
    private ListView lv;
    private MyAdapter my;
    List<Goods> list = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找到控件
        lv = (ListView) findViewById(R.id.lv);
        //调用数据
        init();
        //添加适配器
        my = new MyAdapter();
        lv.setAdapter(my);
    }

    //数据
    public void init() {
        list.add(new Goods("商品1", "50", 0));
        list.add(new Goods("商品2", "80", R.mipmap.ic_launcher, 1));
        list.add(new Goods("商品3", "50", 0));
        list.add(new Goods("商品4", "80", R.mipmap.ic_launcher, 1));
        list.add(new Goods("商品5", "50", 0));
        list.add(new Goods("商品6", "80", R.mipmap.ic_launcher, 1));
        list.add(new Goods("商品7", "50", 0));
        list.add(new Goods("商品8", "80", R.mipmap.ic_launcher, 1));
        list.add(new Goods("商品9", "50", 0));
        list.add(new Goods("商品10", "80", R.mipmap.ic_launcher, 1));
    }


    //适配器的类
    class MyAdapter extends BaseAdapter {
        private final int type0 = 0;
        private final int type1 = 1;

        //返回数据的数量
        @Override
        public int getCount() {
            return list.size();
        }

        //返回每个item
        @Override
        public Object getItem(int i) {
            return list.get(i);
        }

        //返回每个item的ID
        @Override
        public long getItemId(int i) {
            return i;
        }

        //返回视图
        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            //获取数据的类型
            int type = list.get(i).getType();
            //判断类型
            switch (type) {
                case type0:
                    //优化
                    ViewHader0 vh0 = null;
                    if (view == null) {
                        //实例化
                        vh0 = new ViewHader0();
                        //把布局文件转成View
                        view = View.inflate(MainActivity.this, R.layout.activity0, null);
                        //找到控件
                        vh0.tv1 = view.findViewById(R.id.action0_tv1);
                        vh0.tv2 = view.findViewById(R.id.action0_tv2);
                        //把ViewHader0添加到容器里
                        view.setTag(vh0);
                    } else {
                        //从容器里取出
                        vh0 = (ViewHader0) view.getTag();
                    }
                    //赋值
                    vh0.tv1.setText(list.get(i).getName());
                    vh0.tv2.setText(list.get(i).getPrice());
                    break;

                case type1:
                    //优化
                    ViewHader1 vh1 = null;
                    if (view == null) {
                        //实例化ViewHadler1
                        vh1 = new ViewHader1();
                        //把布局文件转成View
                        view = View.inflate(MainActivity.this, R.layout.activity1, null);
                        //找到控件
                        vh1.im = view.findViewById(R.id.action1_im);
                        vh1.tv1 = view.findViewById(R.id.action1_tv1);
                        vh1.tv2 = view.findViewById(R.id.action1_tv2);
                        //把ViewHHadler1放到容器里
                        view.setTag(vh1);
                    } else {
                        //从容器里取出来
                        vh1 = (ViewHader1) view.getTag();
                    }
                    //赋值
                    vh1.tv1.setText(list.get(i).getName());
                    vh1.tv2.setText(list.get(i).getPrice());
                    vh1.im.setImageResource(list.get(i).getIm());
                    break;
            }
            return view;//返回
        }

        //返回条目地类型
        @Override
        public int getItemViewType(int position) {
            return list.get(position).getType();
        }

        //返回有多少中类型
        @Override
        public int getViewTypeCount() {
            return 2;
        }
    }

    public class ViewHader0 {
        TextView tv1, tv2;

    }

    public class ViewHader1 {
        TextView tv1, tv2;
        ImageView im;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值