Выбранный элемент в RecyclerView Горизонтальный макет скрывается за началом макета на Android - PullRequest
0 голосов
/ 23 марта 2020

Я использую RecyclerView с LinearLayout Manager и горизонтальной ориентацией. Он должен использоваться в телевизионном приложении, поэтому его нужно перемещать с помощью dpad. Но всякий раз, когда я go делаю конец и возвращаюсь, он застревает на последнем. См. Фото:

TV App

Выбранный ItemView является первым, но он не будет go к центру. если вы go направо и вернетесь, он покажет полностью.

код:

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="320dp"
        app:layout_constraintBottom_toTopOf="@+id/tv_mini_player_view_placeholder"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/carrier_image_card"
        app:layout_constraintVertical_bias="0.10">

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginStart="@dimen/margin_start_tv_home"
            android:background="@null"
            android:clipToPadding="false"
            android:orientation="horizontal"
            android:padding="@dimen/margin_medium_big"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            tools:context=".android.screens.auth.SelectCarrierActivity"
            tools:listitem="@layout/imagecardview_station" />
    </androidx.core.widget.NestedScrollView>

Одна небольшая вещь, которую я заметил, это расположение, которое World Hits не корректировало. размер этикетки. Когда выбрано, эти макеты показывают описание, которое делает прозрачную серую рамку больше для размещения. Это изменение «View.GONE» на метке описания. Таким образом, последний выбранный макет описания исчез, но макет не был перенастроен. Код для части держателя вида ниже:

inner class StationViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    val mainImageView: ImageView by lazy { itemView.findViewById<ImageView>(R.id.main_image) }
    val titleView: TextView by lazy { itemView.findViewById<TextView>(R.id.title_text) }
    val descriptionView: TextView by lazy { itemView.findViewById<TextView>(R.id.description_text) }


    init {
        val frameLayout = itemView.findViewById<FrameLayout>(R.id.frame_layout)
        val cardView = itemView.findViewById<FrameLayout>(R.id.cardview)
        cardView.apply {
            isFocusable = true
            isFocusableInTouchMode = true
            onFocusChangeListener = View.OnFocusChangeListener { v, hasFocus ->
                if (hasFocus) {
                    AbstractCardPresenter.animateScaleUp(cardView as View)
                    frameLayout.background = itemView.context.resources.getDrawable(R.drawable.card_border)
                    descriptionView.visibility = View.VISIBLE
                } else {
                    AbstractCardPresenter.animateScaleDown(cardView as View)
                    frameLayout.background = null
                    descriptionView.visibility = View.GONE
                }
            }
        }

        itemView.onAttachStateChangeListener {
            onViewAttachedToWindow {
                if (adapterPosition == 0) {
                    cardView.requestFocus()
                }
            }
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Я нашел обидный бит кода !! Я пытался сосредоточиться на первом ViewHolder RecyclerView при загрузке. Это было причиной проблемы. Просто нужно найти другой способ сделать это сейчас! Этот бит кода прямо здесь:

    itemView.onAttachStateChangeListener {
        onViewAttachedToWindow {
            if (adapterPosition == 0) {
                cardView.requestFocus()
            }
        }
    }
0 голосов
/ 23 марта 2020

Вам нужно избавиться от NestedScrollView

  <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="@dimen/margin_start_tv_home"
        android:background="@null"
        android:clipToPadding="false"
        android:orientation="horizontal"
        android:padding="@dimen/margin_medium_big"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
        tools:context=".android.screens.auth.SelectCarrierActivity"
        tools:listitem="@layout/imagecardview_station" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...