Я разрабатываю в Android с RecyclerView (GridView).Я хочу, чтобы у элемента был фон фокусировки по умолчанию, и при щелчке на нем был задан фон фокусировки.
Поэтому я установил макет элемента следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="item"
type="local.PaymentInfo" />
<variable
name="viewModel"
type="local.PaymentViewModel" />
</data>
<RelativeLayout
android:id="@+id/layout_payment_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="?android:attr/selectableItemBackground"
android:focusable="true"
android:clickable="true"
android:focusableInTouchMode="true">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerInParent="true"
android:layout_marginTop="20dp">
<ImageView
android:id="@+id/recharge_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:contentDescription="@string/app_name"
android:src="@drawable/bd_ocr_close"
android:scaleType="fitCenter"/>
<TextView
android:id="@+id/recharge_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_gravity="center_horizontal"
android:text="@{item.name}"
android:layout_marginTop="10dp"
android:textSize="14sp" />
</LinearLayout>
</RelativeLayout>
</layout>
Макет имеет настройку фокуса ниже.
android:focusable="true"
android:clickable="true"
android:focusableInTouchMode="true"
И я хочу, чтобы у элемента был фокус по умолчанию, поэтому я установил фокус на элемент позиции 0 в viewHolder
, как показано ниже.
class RechargeWayViewHolder(private val binding:ItemBinding,
private val viewModel: PaymentViewModel,
private val context:Context):RecyclerView.ViewHolder(binding.root) {
fun bind(item: PaymentInfo, pos:Int){
binding.viewModel = viewModel
binding.item = item
if(pos == 0){
setItemSelect(item)
}
binding.layoutPaymentItem.setOnClickListener {
setItemSelect(item)
}
}
private fun setItemSelect(item: PaymentInfo){
//set Item focus background
binding.layoutRechargeItem.requestFocusFromTouch()
binding.layoutRechargeItem.requestFocus()
//set select Item
viewModel.selectPaymentItem.value = item
}
}
Код выше работаетотлично подходит для установки фокуса по умолчанию на элемент по умолчанию с позицией 0.
Situation 1
Но элемент setOnClickListener
должен срабатывать при двойном щелчке.
Situation 2
Когда я удаляю следующее из xml
.
android:clickable="true"
android:focusableInTouchMode="true"
Мне нужно только один раз щелкнуть по элементу, setOnClickListener
сработает,Но в нем отсутствует фокус по умолчанию.Отображается только фон фокуса, когда я щелкаю элемент.
Я хочу, чтобы у элемента был фон фокуса по умолчанию (не использовать фоновое изображение), и не нужно дважды щелкать по элементу.
СделалЯ что-то пропустил?Заранее спасибо.