У меня есть класс Custom View, поэтому для всего вида мне нужно проверить состояние фокуса, чтобы увидеть, сфокусирован ли он или нет.
Что я пробовал
используется setOnFocusChangeListener { }
обратный вызов для проверки состояния фокуса.
- Проблема здесь заключается в том, что этот обратный вызов не запускается в первый раз и несколько раз, и поведение при согласовании обратного вызова не согласовано.
- Я даже установил атрибуты focusable = true, focusIntouchMode = true для представления.
Пожалуйста, предоставьте некоторые входные данные на случай, если я что-то здесь упустил. Спасибо
Вот код
CarouselCardView constructor(context) : CustomWidget(context),ViewPager.OnPageChangeListener {
private var currentPage = 0
override fun getLayoutId(): Int {
return R.layout.banner
}
init {
isFocusable = true
isFocusableInTouchMode = true
}
private fun setViewpagerAutoAdvanceFeature(
modelData: List<ContentData>
) {
//Auto scroll logic goes here
}
override fun bindData(modelData: List<ContentData>) {
val pagerAdapter = HeroPagerAdapter(context, model = modelTV,
onClickItem = { position ->
clickListener.onItemSelected(uiComponent, uiComponent.componentItems[position])
},
onLastItemReached = { viewPager.setCurrentItem(0, true) })
viewPager.adapter = pagerAdapter
}
//Call backs don't trigger
setOnFocusChangeListener { v, hasFocus ->
if (hasFocus) {
Log.e("ANI","On setOnFocusChangeListener showing")
} else {
Log.e("ANI","On setOnFocusChangeListener not showing")
}
}
Вот макет для справки
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/heroBanner"
android:background="@drawable/bg_transparent">
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewPager"
android:layout_width="@dimen/grid_900"
android:layout_height="@dimen/grid_380"
android:fitsSystemWindows="true" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/indicator"
android:layout_width="@dimen/grid_900"
android:layout_height="@dimen/grid_1"
android:layout_alignBottom="@+id/viewPager"
app:tabBackground="@drawable/btn_selector"
android:layout_gravity="center_horizontal"
android:background="@android:color/transparent"
android:layout_marginBottom="@dimen/margin_bottom_line_indicator"
app:tabIndicatorHeight="0dp"
app:tabGravity="center" />
</RelativeLayout>