RecyclerView кликабельная кнопка в массиве - PullRequest
1 голос
/ 29 апреля 2020

У меня проблема. Как вы можете видеть на картинке, есть две кнопки (+ & -) для каждого предмета, который вы можете заказать. Элементы находятся в списке массивов. Теперь, если я нажму «+», я хочу увеличить число 0 между двумя кнопками (чтобы заказать 2 кока-колы или 3 картофеля фри). Количество предметов должно быть видно в середине двух кнопок. То же самое для кнопки «-» с уменьшением числа (но оно не может go ниже 0).

Так что моя проблема в том, что я не знаю, как это сделать. Как сделать кнопки кликабельными для каждого элемента массива?

Следующий xml и java файл классов реконструируют изображение, которое вы видите. Может быть, вы можете помочь мне, я был бы очень благодарен.

enter image description here

OrderActivity. java

package com.nfc.netvision;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

import java.util.ArrayList;

public class OrderActivity extends AppCompatActivity {

    RecyclerView recyclerView;

    ArrayList<ModelOrder> orderArrayList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_order);

        recyclerView = findViewById(R.id.recyclerview_order_scroll);

        orderArrayList = new ArrayList<>();
        orderArrayList.add(new ModelOrder(R.drawable.coke, "Coka Cola", "Kaltes Getränml", "6"));
        orderArrayList.add(new ModelOrder(R.drawable.fastfood, "Coka Cola", "Kaltes Getränml", "10"));
        orderArrayList.add(new ModelOrder(R.drawable.water, "Coka Cola", "Kaltes Getränml", "20"));
        orderArrayList.add(new ModelOrder(R.drawable.burger, "Coka Cola", "Kaltes Getränml", "30"));

        LinearLayoutManager layoutManager = new LinearLayoutManager(this);
        RecyclerView.LayoutManager recLiLayoutManager = layoutManager;

        recyclerView.setLayoutManager(recLiLayoutManager);

        OrderAdapter adapter = new OrderAdapter(this, orderArrayList);

        recyclerView.setAdapter(adapter);
    }
}

OrderAdapter. java

package com.nfc.netvision;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

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

    private Context mContext;
    private ArrayList<ModelOrder> nList;
    OrderAdapter(Context context, ArrayList<ModelOrder> list) {
        mContext = context;
        nList = list;
    }

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

        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.recyclerview_order_items, parent, false);

        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

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

        ModelOrder orderItem = nList.get(position);
        ImageView image = holder.item_image;
        TextView name, place, price;
        name = holder.item_name;
        place = holder.item_place;
        price = holder.item_price;

        image.setImageResource(orderItem.getImage());

        name.setText(orderItem.getName());
        place.setText(orderItem.getPlace());
        price.setText(orderItem.getPrice());




    }

    @Override
    public int getItemCount() {
        return nList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        ImageView item_image;
        TextView item_name, item_place, item_price;

        public ViewHolder(@NonNull View itemView) {

            super(itemView);
            item_image = itemView.findViewById(R.id.order_item_image);
            item_name = itemView.findViewById(R.id.order_item_name);
            item_place = itemView.findViewById(R.id.order_item_place);
            item_price = itemView.findViewById(R.id.order_item_price);
        }
    }
}

ModelOrder. java

package com.nfc.netvision;

public class ModelOrder {
    private int image;
    private  String name, place, price;

    public ModelOrder(int image, String name, String place, String price) {
        this.image = image;
        this.name = name;
        this.place = place;
        this.price = price;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPlace() {
        return place;
    }

    public void setPlace(String place) {
        this.place = place;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }
}

recyclerViewer. xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp">

    <LinearLayout
        android:weightSum="10"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView
            android:id="@+id/order_item_image"
            android:layout_width="0dp"
            android:layout_weight="4"
            android:layout_height="128dp"
            android:scaleType="centerCrop"
            android:src="@drawable/coke"/>
        <LinearLayout
            android:layout_width="0dp"
            android:layout_weight="4"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/order_item_name"
                android:textSize="18sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textStyle="bold"
                android:text="Name"/>

            <TextView
                android:id="@+id/order_item_place"
                android:text="Description"
                android:textSize="14sp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>


        </LinearLayout>
        <TextView
            android:id="@+id/order_item_price"
            android:text="€ Preis"
            android:layout_width="0dp"
            android:layout_weight="2"
            android:layout_gravity="center"
            android:gravity="center"
            android:textColor="#fff"
            android:background="@drawable/capsule_order"
            android:layout_height="30dp"/>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom">
            <TextView
                android:id="@+id/order_item_minus"
                android:layout_width="28dp"
                android:layout_height="28dp"
                android:textSize="25dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:background="@drawable/capsule_order"
                android:textColor="#fff"
                android:textStyle="bold"
                android:text="-"/>
            <TextView
                android:id="@+id/order_item_count"
                android:layout_width="28dp"
                android:layout_height="28dp"
                android:textSize="25dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:textColor="#000"
                android:textStyle="bold"
                android:text="00"/>
            <TextView
                android:id="@+id/order_item_plus"
                android:layout_width="28dp"
                android:layout_height="28dp"
                android:textSize="25dp"
                android:layout_gravity="center"
                android:gravity="center"
                android:background="@drawable/capsule_order"
                android:textColor="#fff"
                android:textStyle="bold"
                android:text="+"/>
        </LinearLayout>

    </LinearLayout>
</androidx.cardview.widget.CardView>

action_order. xml

<androidx.coordinatorlayout.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <androidx.core.widget.NestedScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:clipToPadding="true"
                app:layout_behavior="@string/appbar_scrolling_view_behavior">

                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/recyclerview_order_scroll"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    >

                </androidx.recyclerview.widget.RecyclerView>
            </androidx.core.widget.NestedScrollView>

Редактировать

text

1 Ответ

1 голос
/ 29 апреля 2020

Simple Logi c

      int value = 0; //Global declare

     // For increase
     order_item_plus.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {


                       value = value + 1;
                       text_order_item_count.setText("" + value);

                    }
                });



    // For decrese
     order_item_minus.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {


                       value = value - 1;
                       text_order_item_count.setText("" + value);

                    }
                });

Вопрос - Как я могу обратиться к текстовому представлению с правильным счетом?

text_order_item_count.getText().toString().trim(); // Return value

КОД ДЛЯ ВАС

package com.nfc.netvision;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

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

    int value = 0; //Global 
    private Context mContext;
    private ArrayList<ModelOrder> nList;
    OrderAdapter(Context context, ArrayList<ModelOrder> list) {
        mContext = context;
        nList = list;
    }

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

        LayoutInflater layoutInflater = LayoutInflater.from(mContext);
        View view = layoutInflater.inflate(R.layout.recyclerview_order_items, parent, false);

        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

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

        ModelOrder orderItem = nList.get(position);
        ImageView image = holder.item_image;
        TextView name, place, price;
        name = holder.item_name;
        place = holder.item_place;
        price = holder.item_price;

        image.setImageResource(orderItem.getImage());

        name.setText(orderItem.getName());
        place.setText(orderItem.getPlace());
        price.setText(orderItem.getPrice());


         holder.order_item_minus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


                   value = value - 1;
                   holder.order_item_count.setText("" + value);

                }
            });

             holder.order_item_plus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {


                   value = value + 1;
                   holder.order_item_count.setText("" + value);

                }
            });





    }

    @Override
    public int getItemCount() {
        return nList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        ImageView item_image;
        TextView item_name, item_place, item_price,order_item_minus,order_item_count;

        public ViewHolder(@NonNull View itemView) {

            super(itemView);
            item_image = itemView.findViewById(R.id.order_item_image);
            item_name = itemView.findViewById(R.id.order_item_name);
            item_place = itemView.findViewById(R.id.order_item_place);
            item_price = itemView.findViewById(R.id.order_item_price);
            order_item_minus = itemView.findViewById(R.id.order_item_minus);
            order_item_plus = itemView.findViewById(R.id.order_item_plus);
            order_item_count = itemView.findViewById(R.id.order_item_count);
        }
    }
}

...