У меня есть класс 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>
setOnFocusListener
? - person NullByte08   schedule 27.04.2020