1. 两个布局文件,一个主布局,一个item单项布局。
2. 三个概念,1. adapter,2.viewhold,3.RecyclerView
3. 步骤如下,
首先建立adapter类,里面嵌套内部类,viewhold类。
adapter的类,继承的必须符合格式,是v7包下的RecyclerView的Adapter类,此类带有特定的泛型参数。并且实现其内部类的ViewHolder,该类ViewHolder又重写了其父类RecyclerView的ViewHolder的方法。
viewhold类,必须继承自RecyclerView的ViewHolder。
Adapter中有4个方法,一个构造方法,一个创建时方法,一个绑定时方法,一个取得记录个数。
在构造方法中,将上下文和数据集传入。
在创建时方法中(onCreateViewHolder),解析子布局,即item单项布局文件,并且返回,
在绑定方法中,从数据集中取得单个“i”的数据,并且把数据设置到viewholder中
后两个方法中的ViewHolder是主类中继承的父类的泛型参数,而此泛型参数又是内部类来实现的。主要作用:初始化子布局中的控件。
public class MyRecyclerViewAdapter extends RecyclerView.Adapter{ private final Context context; private List divines; public MyRecyclerViewAdapter(Context context, List divines) { this.context = context; this.divines = divines; } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View itemView = (View) View.inflate(context, R.layout.item_recyclerview,null); return new ViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) { String gua_name = divines.get(i).getGua_name(); viewHolder.tv_gua_name.setText(gua_name); } @Override public int getItemCount() { return divines.size(); } //内部类,用于解析单项item的布局 class ViewHolder extends RecyclerView.ViewHolder { private TextView tv_gua_name; public ViewHolder(@NonNull View itemView) { super(itemView); tv_gua_name = itemView.findViewById(R.id.tv_gua_name); } }}
第二步,将adapter显示在主activity中,
public class AllListActivity extends AppCompatActivity { private RecyclerView recyclerView; private Listdivines; private MyRecyclerViewAdapter adapter ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_all_list); //取数据 DivineDao dd = new DivineDao(this); List dds = dd.getZhuGua(); recyclerView = findViewById(R.id.rv_all_list); //传入数据集 adapter = new MyRecyclerViewAdapter(this,dds); recyclerView.setAdapter(adapter); //设置布局管理,此步骤为必须 recyclerView.setLayoutManager(new LinearLayoutManager(AllListActivity.this, LinearLayoutManager.VERTICAL, false)); }
另外,在加入RecyclerView后,有显示不全的情况,参考本文上一个blog