如何在单个RecycleView中显示多个ViewType?

问题描述 投票:-1回答:1

问题:因此,我开始用一个适配器创建一个简单的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);
        }
    }**



}
android android-recyclerview
1个回答
0
投票

在“活动/片段”中,准备一个带有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();

}

在适配器类中,如下修改您的逻辑

 @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;
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.