首页 > 其他分享 >关于Recycler工具类的设计

关于Recycler工具类的设计

时间:2022-08-22 15:35:24浏览次数:48  
标签:Map idMap CommonViewHolder Recycler context import 设计 工具 public

 CommonRecyclerAdapter类
package com.example.example.util;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.List;
import java.util.Map;

public abstract class CommonRecyclerAdapter<T> extends RecyclerView.Adapter<CommonViewHolder> {
private List<T> dataList;
private Map<String,Integer> idMap;
private int itemLayout;
private Context context;

public CommonRecyclerAdapter(List<T> dataList, Map<String, Integer> idMap, int itemLayout, Context context) {
this.dataList = dataList;
this.idMap = idMap;
this.itemLayout = itemLayout;
this.context = context;
}

@NonNull
@Override
public CommonViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View embedView=View.inflate(context,itemLayout,null);
return new CommonViewHolder(embedView,idMap);
}

@Override
public void onBindViewHolder(@NonNull CommonViewHolder holder, int position) {
T device=dataList.get(position);
paddingCallback(device,holder);

}

@Override
public int getItemCount() {
return dataList.size();
}

public abstract void paddingCallback(T t,CommonViewHolder holder);
}

CommonViewHolder类
package com.example.example.util;

import android.view.View;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.HashMap;
import java.util.Map;

public class CommonViewHolder extends RecyclerView.ViewHolder {
public Map<String, View> componentMap=new HashMap<>();


public CommonViewHolder(@NonNull View itemView,Map<String,Integer> idMap) {
super(itemView);
for (Map.Entry<String,Integer> entry:idMap.entrySet()){
componentMap.put(entry.getKey(),itemView.findViewById(entry.getValue()));
}
}
public <T> T getView(String tag){
return (T)componentMap.get(tag);
}
}
//主类的方法
private void createRecyclerView() {
//获取父布局,layout里面设置的androidx.recyclerview.widget.RecyclerView
    RecyclerView recyclerView=findViewById(R.id.Recycler);
//创建一个map对象。用于存放item里面的控件,当前item里面只有两个控件,分别是TextView和ImageButton
Map<String,Integer> map=new HashMap<>();
//存入map容器中
map.put("TV_DI_CONTEXT",R.id.tv_di_context);
map.put("IB_DI_IMAGE",R.id.ib_di_image);
//给主布局设置适配器,传入四个参数,分别是数据的list对象,item存入map的控件,item的布局,以及当前类的context对象
recyclerView.setAdapter(new CommonRecyclerAdapter<User>(list,map,R.layout.recycle_di,this) {
@Override
public void paddingCallback(User user, CommonViewHolder holder) {
//取出对象
TextView textView=holder.getView("TV_DI_CONTEXT");
ImageButton imageButton=holder.getView("IB_DI_IMAGE");
textView.setText(user.getContext());
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(RecyclerTest.this));
}

item布局

 

 

主layout

 

 

 优化之后的运行界面

 

标签:Map,idMap,CommonViewHolder,Recycler,context,import,设计,工具,public
From: https://www.cnblogs.com/smile908/p/16612934.html

相关文章

  • Azkaban调度优先级系统的设计与开发
    下面介绍一下Azkaban调度优先级系统的设计与开发业务需求:需要将某个job,它依赖的dependjobs能够成功运行完,然后立刻执行这个job;第一步:这个地方是用来传递参数的,需要先......
  • JSON在线解析及格式化工具
    JSON在线解析及格式化验证-JSON.cn 第一步:将生成的结果转化为jsonSystem.out.println(JSONObject.toJSONString(result));  第二步:将结果使用在线工具转换,便于......
  • iOS越狱进度,越狱工具,一篇文章搞定
    最新的iOS越狱状态iOS15.0–16.0Beta目前无法越狱,CheyoteJailbreak正在开发中。iOS14.6->14.8目前在某些较新的设备(A14)上不可越狱。iOS越狱工具及越狱......
  • java线上问题跟踪工具Arthas的第一次使用
    Arthas是一款线上监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异......
  • Jedis操作set&sortedset和Jedis连接池&Jedis连接池工具类
    Jedis操作set&sortedsetset:/***set*/@Testpublicvoidtest5(){//1.获取连接Jedisjedis=newJedis();//如果使用空参......
  • 介绍一个博客图片上传辅助工具
    前言熟悉我的朋友可能知道,我从18年开始尝试的写一些文字记录一些东西;最开始我是在CSDN上进行创作,后面由于实在忍受不了CSDN上面各种商业化产品转战到博客园。由于之前一......
  • 系统分析与设计方法---需求分析与软件设计
      需求分析是软件生命周期中相当重要的一个阶段。根据 StandishGroup 对 23000 个项目进行的研究结果表明,28%的项目彻底失败,46%的项目超出经费预算或者超出工......
  • 经典设计原则
    经典设计原则除了SOLID之外,常见的还包括KISS、YAGNI、DRY、LOD、CRP等几种:KISS(KeepItSimple&Stupid,尽量保持简单)YAGNI(YouAin'tGonnaNeedIt,你不会需......
  • system desing 系统设计(九):爬虫crawler和typeahead提示框设计
    1、逆向完别人家的APP后,下一步就要想办法变现了,不然花了这么多时间和精力,岂不是白干了?变现的方式之一就是爬虫了!10多年前,那个时候的APP不多,爬虫主要爬取的还是网页web......
  • 关于Microfoft C# Windows程序设计P494 ProgramWithIcon.cs学习体会(重点是winform标
    此程序的重点就是如何添加ico文件:一、在解决方案资源管理器的项目上右键,添加->新建项   二、下拉找到“图标文件”选项,然后将名称更改为“ProgramWithIcon.ico”......