适配器配置(json按照key传入子布局)

虽然说我是小垃圾,但是谁又不是从小垃圾来的呢,言归正传,这几天一直也没更新,倒不是偷懒(虽然我师傅是说我偷懒来着),主要是这个适配器太难了,就是小小的休息一下.....,好了,这回说正事了。首先呢我们需要将想要的json数据在android studio中Java类中进行赋值给一个变量,之后需要初始化Gson方法,具体初始化是这样做的,Gson gson = new Gson();什么?为啥要初始化这个方法,我哪知道,我问我师傅但是我一点没记住。在初始化方法之后我们需要调用这个方法中的fromJson方法,具体是我这样调用的,ArrayList<GOSBean>gosbean = gsom.fromJson(json,new TypeToken<ArrayList<GOSBean>>(){}.getType());好了,我们详细解析一下这段语句,ArrayList<GOSBean>是给gosbean声明一个类型,其中GOSBean是需要你新建一个类的这个类里面将你的json数据转化为对象的属性,并且赋予get和set方法,也就是相当于使用数组列表的GOSBean的泛型来声明了gosbean,之后对gosbean进行赋值操作,赋值的时候就需要使用到初始化方法中的gson了,使用gson中的fromJson方法,来解析json数据,fromJson有两个属性,分别是String json, Type typeOfT这两个属性,第一个属性是你要解析的json数据json,第二个属性相当于声明了这个要解析属性的类型,详见源码。

Gson gson = new Gson(); ArrayList<GOSBean>gosBeans = gson.fromJson(json,new TypeToken<ArrayList<GOSBean>>(){}.getType());

好了,当我们解析了json数据之后,我们就可以为之前学习设置的子布局设置一个布局的样式了

GridLayoutManager gridLayoutManager = new GridLayoutManager(DynamicActivity.this,1){
    @Override
    public boolean canScrollVertically() {
        return true;
    }
};
dy.setLayoutManager(gridLayoutManager);

这个是源码,布局样式就是这么写的,别问为什么,我老师说的,要问问他去。对了其中的dy是我子布局的id

然后我们需要为这个子布局设置一个适配器

DynamicAdapter dynamicAdapter = new DynamicAdapter(gosBeans);
dy.setAdapter(dynamicAdapter);

这个适配器是需要以对象的方式进行调用才可以设置的,在设置好了之后,我们有需要新建一个DynamicAdapter类,也就是适配器的类

然后我们在适配器的类中进行编写,这个类需要继承

RecyclerView.Adapter<DynamicAdapter.ViewHolder> 

说多无益 我直接上源码

public class DynamicAdapter extends ·        <DynamicAdapter.ViewHolder> {
    private ArrayList<GOSBean>gosBeans;

    public DynamicAdapter(ArrayList<GOSBean> gosBeans) {
        this.gosBeans = gosBeans;
    }

    @NonNull
    @Override
    public DynamicAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_dy_style,parent,false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull DynamicAdapter.ViewHolder holder, int position) {
        holder.tv_name.setText(gosBeans.get(position).getName());

    }

    @Override
    public int getItemCount() {
        return gosBeans.size();
    }
    class ViewHolder extends RecyclerView.ViewHolder{

        private final TextView tv_name;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            tv_name = itemView.findViewById(R.id.tv_name);

        }
    }

咱们一行一行的来解析,第一行也就是我说的继承,继承这个RecyclerView.Adapter是因为我的子布局是RecyclerView布局而Adapter是适配器的意思,可以理解为我设置的子布局的适配器,至于后面声明的那个泛型  <DynamicAdapter.ViewHolder> 啥意思,我也不知道,有会的可以帮老弟解答一下,然后咱们看第二行,这个就简单了,这个就是把你在适配器中传过来的gosBeans声明一下,让编译器知道他是谁,之后我们需要一个构造器来构造一下这个gosBeans的属性,也就是

public DynamicAdapter(ArrayList<GOSBean> gosBeans) { this.gosBeans = gosBeans; }

什么什么,英语记不住,我师父教我个大招,你在传入对象的时候直接Alt+回车就出来这个方法了

至this.gosBeans = gosBeans就是将方法中的 gosBeans 赋值给了父类中的 gosBeans,然后暂满看onCreateViewHolder这个方法,这个就简单了,这个就是找ID,找到你子布局对应的那个布局的ID,至于为啥这么找,我不知道,师傅说了但是我忘记了,然后就是onBindViewHolder这个方法,这个方法可了不得,我被罚抄15遍,直接看方法体

holder.tv_name.setText(gosBeans.get(position).getName());

你看出啥了,对啥也看不出来,这个的意思就是Holder中的tv_name设置他的文字,然后就是在gosBeans对象中获取他的角标position,然后替换为Json数据的key也就是getName。

至于tv_name哪里来的 下面再说。

最后就是getItemCount方法了,这个就简单了,就是返回的个数

然后关键来了,我们需要创建一个内部类继承RecyclerView.ViewHolder,为啥继承他,别问我,我也不知道,

class ViewHolder extends RecyclerView.ViewHolder{

private final TextView tv_name;

public ViewHolder(@NonNull View itemView) {

super(itemView);

tv_name = itemView.findViewById(R.id.tv_name);

} }

继承了之后创建一个方法然后继承他的父类itemView就行了,之后我们需要在这个itemView(我理解是所有的页面的父类)里面找到你在子布局中为你布局的控件设置的ID,然后这个ID用一个属性来存储我用的是tv_name,这个属性也就是我在onBindViewHolder方法中使用的属性这样才能完成替换嘛。要不咋替换,想的还挺美,就得这么整。行了,我师傅说我瞎比比,我就不百话了,愿对你们有帮助

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值