android学习——适配器


前言

本章节开始学习使用各种适配器——适配器是用来渲染列表类控件必须的,类似pytorch的datalset,适配器是用来加载数据处理数据用的


一、BaseAdapter

  • 最基本的一个适配器可以配合spinner,Listview,GridView来一起使用,主要针对列表控件使用,如下是一个基本的适配器声明。
//基本适配器的使用
//----基本适配器主要用来自定义一下列表视图的

// 1.首先继承我们的基本适配器类
public class PlanetAdapter extends BaseAdapter {
   
    private Context mContext;
    private int mLayoutId;
    private ArrayList<Planet> mPlanetList;
    private int mBackground;
    //2.完成构造函数,传入需要处理的数据集合
    public PlanetAdapter(Context context, int layout_id, ArrayList<Planet> planet_list, int background) {
   
        //简单的说:Context负责Activity,Service,Intent,资源,Package和权限。
        mContext = context;
        //布局文件的id
        mLayoutId = layout_id;
        //数据文件列表
        mPlanetList = planet_list;
        //背景颜色
        mBackground = background;
    }
    //3.获取数据项的个数
    @Override
    public int getCount() {
   
        return mPlanetList.size();
    }

    @Override
    public Object getItem(int arg0) {
   
        return mPlanetList.get(arg0);
    }

    @Override
    public long getItemId(int arg0) {
   
        return arg0;
    }
    //4.获取每项的展示视图,并对每项的内部控件进行业务处理
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
   
        ViewHolder holder;
        if (convertView == null) {
   
            holder = new ViewHolder();
            //在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。
            // 不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;
            // 而findViewById()是找xml布局文件下的具体widget控件(如 Button、TextView等)。
            // 这里首先加载一个视图
            convertView = LayoutInflater.from(mContext).inflate(mLayoutId, null);
            holder.ll_item = convertView.findViewById(R.id.ll_item);
            holder.iv_icon = convertView.findViewById(R.id.iv_icon);
            holder.tv_name = convertView.findViewById(R.id.tv_name);
            holder.tv_desc = convertView.findViewById(R.id.tv_desc);
            //将视图持有者保持到转换视图里
            convertView.setTag(holder);
        } else {
   
            //获取到上次保持的视图持有者
            holder = (ViewHolder) convertView.getTag();
        }
        // 提取列表是文字信息赋值给布局文件的相关属性
        Planet planet = mPlanetList.get(position);
        holder.iv_icon.setImageResource(planet.image);
        holder.tv_name.setText(planet.name);
        holder.tv_desc.setText(planet.desc);
        //将标记的视图返回,所以保存了,下次不用从资源文件再次加载布局文件了
        return convertView;
    }
    // 定义一个视图持有者,以便重复使用列表项的视图资源
    public final class ViewHolder {
   
        LinearLayout ll_item;
        ImageView iv_icon;
        TextView tv_name;
        TextView tv_desc;
    }

}
  • 使用适配器
private void showList() {
   
        // 从布局文件中获取名叫vs_list的占位视图
        ViewStub vs_list = findViewById(R.id.vs_list);
        vs_list.inflate(); // 展开占位视图
        // 下面通过列表视图展示行星信息
        ListView lv_hello = findViewById(R.id.lv_hello);
        PlanetAdapter adapter = new PlanetAdapter(this, R.layout.item_list,
                Planet.getDefaultList(), Color.WHITE);
        lv_hello.setAdapter(adapter);
    }

二、PagerAdapter

  • Pageradapter是针对翻页控件所使用的一种适配器,基本方法和baseadapter类似
// 1.声明一个页面适配器继承自PagerAdapter
public class ImagePagerAdapater extends PagerAdapter 
    private Context mContext; // 声明一个上下文对象
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不被定义的号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值