如何在每个回收者视图项内单击按钮时实现文本计数器

时间:2019-02-08 09:28:27

标签: java android android-recyclerview

我正在尝试实现文本计数器,在该计数器中,每个回收站视图项中的整数将递增和递减,说0到100开始,我尝试取一个整数,然后单击按钮,我做了i ++,但是这里的问题是当我单击按钮时,该整数仅限于recyclerview项的特定位置,它实际上使整数递增,但是同时,当我单击另一项的按钮时,文本计数器从已设置的整数开始。

这是我的回收站视图类:

public class Mainadapter extends RecyclerView.Adapter<Mainadapter.exViewHolder> {

    List<OrderItemFragment.Ex> exList;
    Context mContext;
    AlertDialog levelDialog;
    int i=0;
    boolean a = false;
    FirebaseFirestore db = FirebaseFirestore.getInstance();

    Mainadapter(List exList, Context context) {
        this.exList= exList;
        this.mContext = context;

    }
    public static class exViewHolder extends RecyclerView.ViewHolder{
        TextView exname;
        ImageView exlogo,attach;
        TextView tv;
        ImageView add,sub;



        exViewHolder(View itemView){
            super(itemView);
            exname= itemView.findViewById(R.id.menuname);
            exlogo=itemView.findViewById(R.id.imgmenu);
            attach=itemView.findViewById(R.id.attach);
            tv=itemView.findViewById(R.id.tvqty);
            add=itemView.findViewById(R.id.additem);
            sub=itemView.findViewById(R.id.removeitem);



        }


    }
    @Override
    public Mainadapter.exViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View viewthigh= LayoutInflater.from(parent.getContext()).inflate(R.layout.menu_item,parent,false);
        Mainadapter.exViewHolder evh=new Mainadapter.exViewHolder(viewthigh);
        return evh;


    }

    @Override
    public void onBindViewHolder(final Mainadapter.exViewHolder holder, final int position){
        holder.exname.setText(exList.get(position).name);
        holder.exlogo.setImageResource(exList.get(position).logoId);
        holder.attach.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(mContext,"Attach Clicked",Toast.LENGTH_LONG).show();
            }
        });
        holder.add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (i!=0&&a==false){
                    i=0;
                    a=false;
                }
                else {
                    holder.tv.setText(String.valueOf(i++));
                }

            }
        });
        holder.sub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.tv.setText(String.valueOf(i--));
            }
        });

    }
    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView){
        super.onAttachedToRecyclerView(recyclerView);
    }
    @Override
    public int getItemCount() {
        return  exList.size();
    }

只是无法弄清楚单击时重置整数的逻辑,因此任何建议都会受到赞赏。

Screenshot of image

2 个答案:

答案 0 :(得分:1)

可以通过在名为“ OrderItemFragment.Ex”的列表模型类中再添加一个int变量来实现。

现在,您在recyclerview中的每个项目都有单独的计数器。

假设您在“ OrderItemFragment.Ex”中具有“ count”变量。 因此,您可以执行以下操作:

holder.add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    int i = exList.get(position).count;
                    holder.tv.setText(String.valueOf(i++));
                    exList.get(position).count = i;
            }
        });
holder.sub.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int i = exList.get(position).count;
                holder.tv.setText(String.valueOf(i--));                         exList.get(position).count = i;
            }
        });

答案 1 :(得分:0)

保留整数数组,而不只是变量i,并保留项目列表的大小:

int [] i = new Int [exList.size()];

并且每次要增加而不是i++时,请使用i[position] ++