【问题标题】:How to use buttons inside a recyclerview? [duplicate]如何在回收站视图中使用按钮? [复制]
【发布时间】:2020-08-07 19:39:23
【问题描述】:

我有这个餐厅应用程序,我想制作一个看起来像 FoodPanda 的结帐(如果您考虑了布局)。 recyclerview 项目应该包含一个包含一个产品数量的文本视图,周围是两个用于减少和增加该数量的按钮,然后是两个带有产品名称和价格的文本视图。 到目前为止,我已经在我的适配器类中尝试过这个:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private ArrayList<Product> product;
    private OnItemClickListener mListener;

    public interface OnItemClickListener {
        void decrementQ(int position);
        void incrementQ(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener){
        mListener = listener;
    }

    public static class MyViewHolder extends ViewHolder {

        public ImageView incrementQty, decrementQty;
        public TextView productName, price, qty;

        public MyViewHolder(View itemView, final OnItemClickListener listener) {
            super(itemView);
            incrementQty = itemView.findViewById(R.id.incrementProduct);
            decrementQty = itemView.findViewById(R.id.decrementProduct);
            qty = itemView.findViewById(R.id.qtyProduct);
            productName = itemView.findViewById(R.id.productName);
            price = itemView.findViewById(R.id.productPrice);

            decrementQty.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION)
                            listener.decrementQ(position);
                    }
                }
            });

            incrementQty.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION)
                            listener.incrementQ(position);
                    }
                }
            });
        }

    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(ArrayList<Product> thisProduct) {
        product = thisProduct;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.products, parent, false);
        MyViewHolder mv = new MyViewHolder(v, mListener);
        return mv;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        Product currentProduct = product.get(position);
        holder.decrementQty.setImageResource(currentProduct.getDecrementSource());
        holder.qty.setText(currentProduct.getQty());
        holder.incrementQty.setImageResource(currentProduct.getIncrementSource());
        holder.productName.setText(currentProduct.getProductName());
        holder.price.setText(currentProduct.getProductPrice());

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return product.size();
    }
}

这是我的结帐活动课程:

public class checkout extends AppCompatActivity {

    private ArrayList<Product> product;
    private RecyclerView recyclerView;
    private MyAdapter mAdapter;
    private RecyclerView.LayoutManager layoutManager;
    @Override

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_checkout);

        product = new ArrayList<>();
        product.add(new Product(R.drawable.minus, "1", R.drawable.plus, "Buttered Noodles", "15 RON"));
        product.add(new Product(R.drawable.minus, "2", R.drawable.plus, "Teryiaki","20 RON"));
        product.add(new Product(R.drawable.minus, "3", R.drawable.plus, "ginger", "3 RON"));

        buildCheckout();
    }
    public void removeItem(int position) {
       product.remove(position);
       mAdapter.notifyItemRemoved(position);
    }

    public void buildCheckout(){
        recyclerView = findViewById(R.id.checkoutList);
        recyclerView.setHasFixedSize(true);
        layoutManager = new LinearLayoutManager(this);
        mAdapter = new MyAdapter(product);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(mAdapter);

        mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
            @Override
            public void decrementQ(int position) {
                TextView q = recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.qtyProduct);
                int qty = Integer.parseInt((String) q.getText());
                qty--;
                if(qty < 1)
                    removeItem(position);
                else
                    q.setText(qty);
            }

            @Override
            public void incrementQ(int position) {
                TextView q = recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.qtyProduct);
                int qty = Integer.parseInt((String) q.getText());
                qty++;
                q.setText(qty);
            }
        });
    }
}

问题是,当我尝试与递增和递减按钮交互时,应用程序不断停止,我不知道下一步该怎么做或我做错了什么。

【问题讨论】:

标签: java android android-studio button android-recyclerview


【解决方案1】:

您将Int 值而不是字符串值设置为TextView,您将获得ResourceNotFoundException

@Override
public void incrementQ(int position) {
        TextView q = recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.qtyProduct);
        int qty = Integer.parseInt((String) q.getText());
        qty++;
        q.setText(qty);//ERROR change to q.setText("" + qty);
}

你在decrementQ有同样的问题

【讨论】:

    猜你喜欢
    • 2015-06-12
    • 1970-01-01
    • 2020-09-05
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多