Как правильно настроить прослушивание щелчков элемента списка в Android? - PullRequest
0 голосов
/ 03 декабря 2018

Я учусь разработке Android.Я пытаюсь установить OnItemClickListener, но он не работает.У меня есть этот класс MainActivity

public class MainActivity extends AppCompatActivity {

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

    final ArrayList<Product> products = new ArrayList<Product>();
    products.add(new Product("product one",100, R.drawable.one, 1));
    products.add(new Product("product two",200, R.drawable.two, 2));
    products.add(new Product("product three",170, R.drawable.three, 3));
    products.add(new Product("product four",220, R.drawable.four, 4));
    products.add(new Product("product five",300,R.drawable.five, 5));
    products.add(new Product("product six",130, R.drawable.six, 6));
    products.add(new Product("product seven",100, R.drawable.seven, 7));
    products.add(new Product("product eight",240, R.drawable.eight, 8));
    products.add(new Product("product nine",190, R.drawable.nine, 9));
    products.add(new Product("product ten",150, R.drawable.ten, 10));

    ProductAdapter itemsAdapter = new ProductAdapter(this, products);
    ListView listView = (ListView) findViewById(R.id.list);
    listView.setAdapter(itemsAdapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            Toast.makeText(view.getContext() , "Welcome" ,Toast.LENGTH_SHORT).show();
        }
    });

  }
}

И этот класс продукта

public class Product {
  private String mProductName;
  private int mProductPrice;
  private int mProductImage;
  private int mProductId;

  public Product(String productName, int productPrice, int productImage, int productId){
    mProductName = productName;
    mProductPrice = productPrice;
    mProductImage = productImage;
    mProductId = productId;
  }

  public String getProductName(){

    String upperString = mProductName.substring(0,1).toUpperCase() + mProductName.substring(1);

    return upperString;
  }

  public int getProductPrice(){ return mProductPrice; }

  public int getProductImage() { return mProductImage;  }

  public int getProductId() { return mProductId; }
}

list_item: содержит полный макет.Вложенные LinearLayouts для оформления элемента списка

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="90dp">

<ImageView
    android:id="@+id/list_item_icon"
    android:layout_width="90dp"
    android:layout_height="80dp"
    android:layout_marginTop="5dp"
    android:scaleType="centerCrop"/>

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="2"
    android:orientation="vertical">

    <TextView
        android:id="@+id/product_name"
        style="@style/lisTxt"/>

    <TextView
        android:id="@+id/product_price"
        style="@style/lisTxt"
        android:textSize="11sp"
        android:textColor="@android:color/black"/>

</LinearLayout>

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical">

    <Button
        android:id="@+id/add_to_cart"
        android:text="Add To Cart"
        style="@style/listBtn"/>

    <Button
        android:id="@+id/buy_now"
        android:text="Buy Now"
        style="@style/listBtn"/>

  </LinearLayout>

</LinearLayout>

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

enter image description here

1 Ответ

0 голосов
/ 03 декабря 2018

Добавлена ​​эта строка в макет элемента списка

android:descendantFocusability="blocksDescendants"

list_item parent LinearLayout выглядит следующим образом

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="90dp"
android:descendantFocusability="blocksDescendants">
...