Создание метода для определенного элемента c в ArrayList - PullRequest
0 голосов
/ 31 марта 2020

В основном у меня есть "Merch", а также ArrayList и адаптер к нему. Я поместил их в GridView, который имеет кнопку и текстовое представление. и я хочу, чтобы, когда я нажимал кнопку, это добавляло +1 к количеству товара, на котором я нажал (вроде как приложение для онлайн-покупок). Мой код

public class merchandise extends AppCompatActivity {
  private TextView quantityTextView;
  Button incrementButton;
  int quantity = 1;
  int price = 3;


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

      /** Option 1*/
      quantityTextView = (TextView) findViewById(R.id.quantity_text_view);
      incrementButton = (Button) findViewById(R.id.button_increment);
      incrementButton.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              add();
          }
      });



      ArrayList<Merch> merchArrayList = new ArrayList<Merch>();
      merchArrayList.add(new Merch(R.drawable.icon,"PRODUCT1"));
      merchArrayList.add(new Merch(R.drawable.icon,"PRODUCT2"));
      merchArrayList.add(new Merch(R.drawable.icon,"PRODUCT3"));
      merchArrayList.add(new Merch(R.drawable.icon,"PRODUCT3"));


      merchAdapter merchAdapter =  new merchAdapter(this,merchArrayList);
      GridView merchListView = (GridView) findViewById(R.id.merch_grid_view);
      merchListView.setAdapter(merchAdapter);



  }


  /** this method is used to increase quantity*/
  public void add () {

      if (quantity < 10) {
          quantity = quantity + 1;
          price = price + 3;

          Log.v("merch", "Added +1");

          /** Option 2 = findViewByID* here*/
          quantityTextView = (TextView) findViewById(R.id.quantity_text_view);

          quantityTextView.setText("" + quantity);
          displayPrice(price);
      }
My XML for ListView that each Merch will be in:
<LinearLayout
    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="match_parent"
    tools:context=".merchandise"
    android:padding="16dp"
    android:orientation="vertical"
    android:id="@+id/merchandise_view">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        style="@style/imageStyle"
        android:src="@drawable/icon"
        android:layout_gravity="center_horizontal"
        android:id="@+id/product_image"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text= "Product Title"
        android:gravity="center_horizontal"
        android:id="@+id/product_name"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal"
        android:gravity="center_horizontal"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp">


        <TextView
            android:id="@+id/quantity_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="8dp"
            android:paddingRight="8dp"
            android:text="1"
            android:textAlignment="center"
            android:textColor="#000000"
            android:textSize="16sp"/>


        <Button
            android:layout_width="46dp"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:text="+"
            android:onClick="add"
            android:id="@+id/button_increment"/>
    </LinearLayout>


</LinearLayout>

Теперь, если я использую Вариант 1, действие завершается сбоем, потому что и кнопка, и TextView имеют исключение NullPointerException.

Если я использую Вариант 2, действие работает и кнопка работает только на первый элемент. Даже когда я нажимаю на кнопку увеличения второго элемента, он меняет только первый элемент. Итак, как мне сделать так, чтобы каждая кнопка соответствовала представлению listView и количественному текстовому представлению, в котором она находится?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...