问题:因此,我开始用一个适配器创建一个简单的RecycleView,但随后我想显示2个不同的ItemView,因此我不得不制作“另一个”适配器。因此,我遵循了以下建议:How to set two adapters to one RecyclerView?他试图制作一个简单的bind方法,但我没有明白他的意思。
我应该显示一个对象,但是怎么显示?
感谢您的任何建议。
some package, imports; *
public class MultiAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
public static class FirstViewHolder extends RecyclerView.ViewHolder{
TextView second_segment;
private FirstViewHolder( View itemView) {
super(itemView);
second_segment = itemView.findViewById(R.id.segment_tuesday);
}
**private void bind(MultiAdapter firstObj) {
Exercise exercise = new Exercise();
//firstObj = exercise;
}**
}
public static class SecondViewHolder extends RecyclerView.ViewHolder {
TextView first_segment;
private SecondViewHolder( View itemView) {
super(itemView);
first_segment = itemView.findViewById(R.id.segment_monday);
}
**private void bind(MultiAdapter secondObj) {
Exercise exercise = new Exercise();
//secondObj = exercise;
}**
}
private static int ITEM_TYPE_C_T;
private static int ITEM_TYPE_S_B;
private List<Object> items = new ArrayList<>();
public MultiAdapter(List<Object> items){
this.items.addAll(items);
}
@Override
public int getItemViewType(int position) {
if (items.get(position) instanceof MultiAdapter) {
return ITEM_TYPE_C_T;
}
else{
return ITEM_TYPE_S_B;
}
}
@Override
public int getItemCount() {
return items.size();
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
if (viewType == ITEM_TYPE_S_B){
View view = layoutInflater.inflate(R.layout.segment_exmpl1,parent,false);
return new SecondViewHolder(view);
} else {
View view = layoutInflater.inflate(R.layout.segment_exmpl2,parent,false);
return new FirstViewHolder(view);
}
}
@Override
**public void onBindViewHolder(@NonNull RecyclerView.ViewHolder Holder, int position) {
Object item = items.get(position);
if (Holder instanceof FirstViewHolder) {
FirstViewHolder viewHolder0 = (FirstViewHolder) Holder;
//((FirstViewHolder) Holder).bind((FirstObj) item);
} else {
SecondViewHolder viewHolder0 = (SecondViewHolder) Holder;
//((SecondViewHolder) Holder).bind((SecondObj) item);
}
}**
}
答案 0 :(得分:1)
在“活动/片段”中,准备一个带有ID的模型对象。
private void prepareDataSet(){
List<Object> items = new ArrayList<>();
items.add(new Object(id1));
items.add(new Object(id2));
items.add(new Object(id1));
items.add(new Object(id2));
multiAdapter.notifyDataSetChanged();
}
在Adapter类中,如下修改逻辑
@Override
public int getItemViewType(int position) {
if (items.get(position).id=id1) {
return ITEM_TYPE_C_T;
}
else if(items.get(position).id=id2){
return ITEM_TYPE_S_B;
}else {
return DEFAULT_VIEW;
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
if (viewType == ITEM_TYPE_S_B){
View view = layoutInflater.inflate(R.layout.segment_exmpl1,parent,false);
return new SecondViewHolder(view);
} else if(viewType == ITEM_TYPE_S_B) {
View view = layoutInflater.inflate(R.layout.segment_exmpl2,parent,false);
return new FirstViewHolder(view);
}else{
//to prevent crash on null
View view = layoutInflater.inflate(R.layout.default_view,parent,false);
return new DefaultHolder(view);
}
}