我应该为每个循环系统创建适配器吗?

发布于 2025-01-31 05:04:22 字数 265 浏览 5 评论 0原文

我正在用于回收器适配器的diffutil,我需要许多回收库进行分类。我应该为每个循环系统创建适配器吗?相同的视图,相同的类型数据,相同的功能,不同的数据btw

”在此处输入图像描述”

I am using diffutil for my recycler adapters and I need many recyclerview for categorization. Should I create adapter for every recyclerview? Same view, same type data, same functions, different data btw

enter image description here

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷迭香的记忆 2025-02-07 05:04:22

如果您检查回收器视图的OnBindViewHolder方法,它具有您的 holder 参数,该参数为您提供了您拥有的不同视图持有人的实例,并因此为回收器视图设置了布局。
例如,在我的情况下,我必须使用单个回收文章适配器来创建实例收入和列表中的费用。

这就是我的OnBindViewHolder外观:

@override
public void onbindViewHolder(@nonnull recyClerview.ViewHolder持有人,int位置){

    DialogDetails d=new DialogDetails();

    if (holder instanceof IncomeListHolder){
        ((IncomeListHolder)holder).categoryText.setText(expensesList.get(position).getCategory());
        ((IncomeListHolder)holder).incomeText.setText("+"+expensesList.get(position).getAmount());
        ((IncomeListHolder)holder).incomeText.setTextColor(context.getResources().getColor(R.color.income_color));


    }

    if (holder instanceof ExpensesListHolder){
        ((ExpensesListHolder) holder).category.setText(list.get(position-expensesList.size()).getCategory());
        ((ExpensesListHolder) holder).expenseText.setText("-"+list.get(position- expensesList.size()).getExpense());
        ((ExpensesListHolder) holder).expenseText.setTextColor(context.getResources().getColor(R.color.expense_color));
    }







    //.setText(String.valueOf(balanceList.get(position).getIncome()));


}

您还必须为您希望显示的所有列表数据创建单独的视图持有人,例如:

  public class IncomeListHolder extends RecyclerView.ViewHolder {
        TextView categoryText;
        TextView incomeText;

    public IncomeListHolder(@NonNull View itemView) {
        super(itemView);

        categoryText=itemView.findViewById(R.id.main_category_text_view);
        incomeText=itemView.findViewById(R.id.expenses_text_view);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position=getAdapterPosition();
               if (listener!=null && position!=RecyclerView.NO_POSITION){
                   listener.getIncomeData(expensesList.get(position),view);
                  details.setUpdate(true);
               }
            }
        });
    }
}

public class ExpensesListHolder extends RecyclerView.ViewHolder{

     TextView category;
     TextView expenseText;
    public ExpensesListHolder(@NonNull View itemView) {
        super(itemView);

        category=itemView.findViewById(R.id.main_category_text_view_2);
        expenseText=itemView.findViewById(R.id.expenses_text_view_2);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position=getAdapterPosition();
                if (listener!=null && position!=RecyclerView.NO_POSITION){
                    listener.getExpenseData(list.get(position-expensesList.size()),view);
                    details.setUpdate(true);
                }
            }
        });
    }
}

我的整个回收器视图适配器:

public class IncomeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        final int VIEW_TYPE_INCOME=0;
        final int VIEW_TYPE_EXPENSE=1;
        View view;
        List<DataBaseEntity> expensesList=new ArrayList<>();
        List<ExpenseDataEntity> list=new ArrayList<>();
        Context context;
        OnItemClickListener listener;
        DialogDetails details=new DialogDetails();


     public IncomeListAdapter(Context context) {
         this.context = context;
     }
//
//         View v=LayoutInflater.from(context).inflate(R.layout.fragment_expense_home,null);
////          t=v.findViewById(R.id.income_text_view);
//     }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

         if (viewType==VIEW_TYPE_INCOME) {
             view = LayoutInflater.from(parent.getContext()).inflate(R.layout.expenses_list, parent, false);
             return new IncomeListHolder(view);
         }

         if (viewType==VIEW_TYPE_EXPENSE){
             view=LayoutInflater.from(parent.getContext()).inflate(R.layout.expense_layout_list,parent,false);
             return new ExpensesListHolder(view);
         }



        return null;
    }

    public interface OnItemClickListener{
        void getIncomeData(DataBaseEntity dataBaseEntity,View view);
        void getExpenseData(ExpenseDataEntity expenseDataEntity,View view);

    }

    public void setOnItemClickListener(OnItemClickListener listener){
         this.listener=listener;
    }






    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        DialogDetails d=new DialogDetails();

        if (holder instanceof IncomeListHolder){
            ((IncomeListHolder)holder).categoryText.setText(expensesList.get(position).getCategory());
            ((IncomeListHolder)holder).incomeText.setText("+"+expensesList.get(position).getAmount());
            ((IncomeListHolder)holder).incomeText.setTextColor(context.getResources().getColor(R.color.income_color));


        }

        if (holder instanceof ExpensesListHolder){
            ((ExpensesListHolder) holder).category.setText(list.get(position-expensesList.size()).getCategory());
            ((ExpensesListHolder) holder).expenseText.setText("-"+list.get(position- expensesList.size()).getExpense());
            ((ExpensesListHolder) holder).expenseText.setTextColor(context.getResources().getColor(R.color.expense_color));
        }







        //.setText(String.valueOf(balanceList.get(position).getIncome()));


    }

    public DataBaseEntity getDataAt(int position){
         return expensesList.get(position);
    }

    public ExpenseDataEntity getExpenseAt(int position){
         return list.get(position- expensesList.size());
    }

    @Override
    public int getItemCount() {
        return expensesList.size()+list.size();
    }

    @Override
    public int getItemViewType(int position) {


        if (position< expensesList.size()){
            return VIEW_TYPE_INCOME;
        }

        if (position-expensesList.size()< list.size()){
            return VIEW_TYPE_EXPENSE;
        }

        return -1;
    }

    public void setExpensesList(List<DataBaseEntity> expensesList){
        this.expensesList=expensesList;
        notifyDataSetChanged();
    }

    public void setList(List<ExpenseDataEntity> list){
         this.list=list;
         notifyDataSetChanged();
    }
//    public void setBalanceList(List<BalanceSheetEntity> balanceList){
//        this.balanceList=balanceList;
//        notifyDataSetChanged();
//    }

    public class IncomeListHolder extends RecyclerView.ViewHolder {
            TextView categoryText;
            TextView incomeText;

        public IncomeListHolder(@NonNull View itemView) {
            super(itemView);

            categoryText=itemView.findViewById(R.id.main_category_text_view);
            incomeText=itemView.findViewById(R.id.expenses_text_view);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position=getAdapterPosition();
                   if (listener!=null && position!=RecyclerView.NO_POSITION){
                       listener.getIncomeData(expensesList.get(position),view);
                      details.setUpdate(true);
                   }
                }
            });
        }
    }

    public class ExpensesListHolder extends RecyclerView.ViewHolder{

         TextView category;
         TextView expenseText;
        public ExpensesListHolder(@NonNull View itemView) {
            super(itemView);

            category=itemView.findViewById(R.id.main_category_text_view_2);
            expenseText=itemView.findViewById(R.id.expenses_text_view_2);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position=getAdapterPosition();
                    if (listener!=null && position!=RecyclerView.NO_POSITION){
                        listener.getExpenseData(list.get(position-expensesList.size()),view);
                        details.setUpdate(true);
                    }
                }
            });
        }
    }


}

If you check your recycler view's onBindViewHolder method it has your holder parameter which provides you with the instance of different ViewHolders you have and accordingly set the layout for the recycler view.
For example, in my case I had to use a single recyclerView adapter to create an instance Income as well as expense in a list.

This is how my onBindViewHolder looks:

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

    DialogDetails d=new DialogDetails();

    if (holder instanceof IncomeListHolder){
        ((IncomeListHolder)holder).categoryText.setText(expensesList.get(position).getCategory());
        ((IncomeListHolder)holder).incomeText.setText("+"+expensesList.get(position).getAmount());
        ((IncomeListHolder)holder).incomeText.setTextColor(context.getResources().getColor(R.color.income_color));


    }

    if (holder instanceof ExpensesListHolder){
        ((ExpensesListHolder) holder).category.setText(list.get(position-expensesList.size()).getCategory());
        ((ExpensesListHolder) holder).expenseText.setText("-"+list.get(position- expensesList.size()).getExpense());
        ((ExpensesListHolder) holder).expenseText.setTextColor(context.getResources().getColor(R.color.expense_color));
    }







    //.setText(String.valueOf(balanceList.get(position).getIncome()));


}

You also have to create separate viewHolders for all the list data you wish to display,like:

  public class IncomeListHolder extends RecyclerView.ViewHolder {
        TextView categoryText;
        TextView incomeText;

    public IncomeListHolder(@NonNull View itemView) {
        super(itemView);

        categoryText=itemView.findViewById(R.id.main_category_text_view);
        incomeText=itemView.findViewById(R.id.expenses_text_view);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position=getAdapterPosition();
               if (listener!=null && position!=RecyclerView.NO_POSITION){
                   listener.getIncomeData(expensesList.get(position),view);
                  details.setUpdate(true);
               }
            }
        });
    }
}

public class ExpensesListHolder extends RecyclerView.ViewHolder{

     TextView category;
     TextView expenseText;
    public ExpensesListHolder(@NonNull View itemView) {
        super(itemView);

        category=itemView.findViewById(R.id.main_category_text_view_2);
        expenseText=itemView.findViewById(R.id.expenses_text_view_2);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position=getAdapterPosition();
                if (listener!=null && position!=RecyclerView.NO_POSITION){
                    listener.getExpenseData(list.get(position-expensesList.size()),view);
                    details.setUpdate(true);
                }
            }
        });
    }
}

My whole recycler view adapter:

public class IncomeListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

        final int VIEW_TYPE_INCOME=0;
        final int VIEW_TYPE_EXPENSE=1;
        View view;
        List<DataBaseEntity> expensesList=new ArrayList<>();
        List<ExpenseDataEntity> list=new ArrayList<>();
        Context context;
        OnItemClickListener listener;
        DialogDetails details=new DialogDetails();


     public IncomeListAdapter(Context context) {
         this.context = context;
     }
//
//         View v=LayoutInflater.from(context).inflate(R.layout.fragment_expense_home,null);
////          t=v.findViewById(R.id.income_text_view);
//     }


    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

         if (viewType==VIEW_TYPE_INCOME) {
             view = LayoutInflater.from(parent.getContext()).inflate(R.layout.expenses_list, parent, false);
             return new IncomeListHolder(view);
         }

         if (viewType==VIEW_TYPE_EXPENSE){
             view=LayoutInflater.from(parent.getContext()).inflate(R.layout.expense_layout_list,parent,false);
             return new ExpensesListHolder(view);
         }



        return null;
    }

    public interface OnItemClickListener{
        void getIncomeData(DataBaseEntity dataBaseEntity,View view);
        void getExpenseData(ExpenseDataEntity expenseDataEntity,View view);

    }

    public void setOnItemClickListener(OnItemClickListener listener){
         this.listener=listener;
    }






    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {

        DialogDetails d=new DialogDetails();

        if (holder instanceof IncomeListHolder){
            ((IncomeListHolder)holder).categoryText.setText(expensesList.get(position).getCategory());
            ((IncomeListHolder)holder).incomeText.setText("+"+expensesList.get(position).getAmount());
            ((IncomeListHolder)holder).incomeText.setTextColor(context.getResources().getColor(R.color.income_color));


        }

        if (holder instanceof ExpensesListHolder){
            ((ExpensesListHolder) holder).category.setText(list.get(position-expensesList.size()).getCategory());
            ((ExpensesListHolder) holder).expenseText.setText("-"+list.get(position- expensesList.size()).getExpense());
            ((ExpensesListHolder) holder).expenseText.setTextColor(context.getResources().getColor(R.color.expense_color));
        }







        //.setText(String.valueOf(balanceList.get(position).getIncome()));


    }

    public DataBaseEntity getDataAt(int position){
         return expensesList.get(position);
    }

    public ExpenseDataEntity getExpenseAt(int position){
         return list.get(position- expensesList.size());
    }

    @Override
    public int getItemCount() {
        return expensesList.size()+list.size();
    }

    @Override
    public int getItemViewType(int position) {


        if (position< expensesList.size()){
            return VIEW_TYPE_INCOME;
        }

        if (position-expensesList.size()< list.size()){
            return VIEW_TYPE_EXPENSE;
        }

        return -1;
    }

    public void setExpensesList(List<DataBaseEntity> expensesList){
        this.expensesList=expensesList;
        notifyDataSetChanged();
    }

    public void setList(List<ExpenseDataEntity> list){
         this.list=list;
         notifyDataSetChanged();
    }
//    public void setBalanceList(List<BalanceSheetEntity> balanceList){
//        this.balanceList=balanceList;
//        notifyDataSetChanged();
//    }

    public class IncomeListHolder extends RecyclerView.ViewHolder {
            TextView categoryText;
            TextView incomeText;

        public IncomeListHolder(@NonNull View itemView) {
            super(itemView);

            categoryText=itemView.findViewById(R.id.main_category_text_view);
            incomeText=itemView.findViewById(R.id.expenses_text_view);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position=getAdapterPosition();
                   if (listener!=null && position!=RecyclerView.NO_POSITION){
                       listener.getIncomeData(expensesList.get(position),view);
                      details.setUpdate(true);
                   }
                }
            });
        }
    }

    public class ExpensesListHolder extends RecyclerView.ViewHolder{

         TextView category;
         TextView expenseText;
        public ExpensesListHolder(@NonNull View itemView) {
            super(itemView);

            category=itemView.findViewById(R.id.main_category_text_view_2);
            expenseText=itemView.findViewById(R.id.expenses_text_view_2);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int position=getAdapterPosition();
                    if (listener!=null && position!=RecyclerView.NO_POSITION){
                        listener.getExpenseData(list.get(position-expensesList.size()),view);
                        details.setUpdate(true);
                    }
                }
            });
        }
    }


}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文