可点击的Listview项目

时间:2018-02-22 20:05:05

标签: android listview

我有一个ListView有几个项目。可以单击每个项目以显示另一个视图。

但是,在每个项目中,我都有一个EditText,其中包含一个应该可编辑的数量。

ListView目前有.setOnItemClickListener(),如果商品布局有android:descendantFocusability="blocksDescendants"

,则可以正常使用

但是EditText无法再集中注意力,因此您无法更改数量。

这是我的ListView

<ListView
    android:id="@+id/lvOrderItems"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_margin="15dp"
    android:layout_weight=".35"
    android:clickable="true"
    android:divider="@null" />

这是我的项目:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal"
    android:descendantFocusability="blocksDescendants"
    android:padding="5dp">

    <ImageView
        android:id="@+id/imgItemImage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_gravity="center_vertical"
        android:layout_margin="5dp"
        android:elevation="2dp"
        android:scaleType="fitCenter" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="7"
        android:orientation="vertical"
        android:paddingLeft="10dp">

        <TextView
            android:id="@+id/txtItemName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lato"
            android:text="TextView"
            android:textColor="#666666" />

        <TextView
            android:id="@+id/txtItemPrice"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lato_bold"
            android:text="$0.00"
            android:textColor="#333333"
            android:textSize="18sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1.2"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView7"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lato"
            android:text="Qty:" />

        <EditText
            android:id="@+id/txtTabletQty"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/textbox_background"
            android:ems="10"
            android:inputType="number"
            android:padding="10dp"
            android:singleLine="true" />

    </LinearLayout>

</LinearLayout>

我在另一篇文章中读到“Android不允许选择具有可聚焦元素(按钮)的列表项。”

但我需要EditText能够专注于用户点击它并更改其中的值。除非我遗失了什么?

我的适配器代码非常标准。这是getView代码:

ViewHolder holder;

if (view == null) {

    // CREATE
    holder = new ViewHolder();
    view = inflater.inflate(R.layout.cart_items, null);
    holder.txtItemName = view.findViewById(R.id.txtItemName);
    holder.txtItemPrice = view.findViewById(R.id.txtItemPrice);
    holder.imgItemImage = view.findViewById(R.id.imgItemImage);
    holder.txtTabletQty = view.findViewById(R.id.txtTabletQty);
    holder.imgBtnClearItem = view.findViewById(R.id.imgBtnClearItem);

    // SET
    view.setTag(holder);

} else {

    // SET
    holder = (ViewHolder) view.getTag();

}

// SET
holder.txtTabletQty.setText(cartItem.get("quantity"));
holder.txtTabletQty.setId(position);

holder.txtTabletQty.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {

        if(!hasFocus){

            // UPDATE QUANTITY

        }
    }
});

1 个答案:

答案 0 :(得分:1)

对于解决方法不要使用setOnItemClickListener进行项目点击。在getView()方法中设置点击监听器。

内部getView()

view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(context, "Item Clicked",Toast.LENGTH_LONG).show();
        }
    });

然后从列表项布局中删除android:descendantFocusability="blocksDescendants"

因此Edittext可以获得焦点。