我有一个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
}
}
});
答案 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
可以获得焦点。