我一直在尝试在我的应用程序中实现这个sectionedRecyclerView库,但我需要它来处理没有部分页眉/页脚的情况(同时仍然显示项目)和有的情况。该库始终需要至少 1 个部分/标题。
此外,这个库只有一个 viewHodler。我希望能够对项目、页眉和页脚使用不同的 viewHolders 。
我需要覆盖/更改哪些方法来完成此操作?
我一直在尝试在我的应用程序中实现这个sectionedRecyclerView库,但我需要它来处理没有部分页眉/页脚的情况(同时仍然显示项目)和有的情况。该库始终需要至少 1 个部分/标题。
此外,这个库只有一个 viewHodler。我希望能够对项目、页眉和页脚使用不同的 viewHolders 。
我需要覆盖/更改哪些方法来完成此操作?
首先,您的模型上应该有一个类型变量。
public class MyModel{
private int type;
//setters and getters...
}
然后,在您的适配器上创建 2 个 ViewHolder,但您将在 Adapter<> 上使用的类将是母类(ViewHolder)。
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
class ViewModel1 extends RecyclerView.ViewHolder{
//your code
}
class ViewModel2 extends RecyclerView.ViewHolder{
//your code
}
}
之后,您应该在适配器上实现一些方法。
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<MyModel> mModelList;
public MyAdapter(List<MyModel> models){
this.mModelList = models;
}
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch (viewType) {
case TYPE_1:
view = inflater.inflate(R.layout.view_type_1, parent, false);
return new ViewModel1(view);
case TYPE_2:
view = inflater.inflate(R.layout.view_type_2, parent, false);
return new ViewModel2(view);
}
return null;
}
@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final MyModel item = mModelList.get(position);
switch (item.type) {
case TYPE_1:
final ViewHolder1 vh1 = (ViewHolder1)holder;
//your code
break;
case TYPE_2:
final ViewHolder2 vh2 = (ViewHolder2)holder;
//your code
break;
}
}
@Override public int getItemViewType(int position) {
return mModelList.get(position).type;
}
@Override public int getItemCount() {
return mModelList.size();
}
}