Android. Вложенный просмотрщик повторяет прокрутку при обходе родительского переработчика

ОК, кажется ложным предупреждением. Это не было связано с долотостью, было просто другое DLL, которое не зависит от freetype. Однако сообщения об ошибках могут быть более полезными.

0
задан LolusKekus 28 January 2019 в 08:19
поделиться

3 ответа

Пожалуйста, удалите

android:focusableInTouchMode="true"
android:focusable="true"

и дайте мне знать статус.

0
ответ дан Sumanta Banerjee 28 January 2019 в 08:19
поделиться

Добавьте это в ваш класс HAdapter

private View.OnKeyListener mOnKeyListener = new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
       RecyclerView rv = (RecyclerView) v.getParent();
       if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
           rv.getLayoutManager().scrollToPosition(0);
       }          
       return false;
    }
};

и

itemView.setOnKeyListener(mOnKeyListener);

в метод onCreateViewHolder вашего класса HAdapter.

Это только для клавиши «Стрелка вверх», вы можете расширить предложение if, чтобы включить клавишу «Стрелка вниз».

Редактировать:

Кроме того, вы можете поместить это в предложение if вместо вызова метода scrollToPosition:

private View.OnKeyListener mOnKeyListener = new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        RecyclerView rv = (RecyclerView) v.getParent();
        if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP) {
           int pos = rv.getLayoutManager().getPosition(v);
           rv.scrollBy(-((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, pos * width, mContext.getResources().getDisplayMetrics())), 0);
        }          
        return false;
    }
};

где width - это ширина RecyclerView пункт (ы) в дп.

Предложение:

Я бы переместил методы setAdapter и setLayoutManager из класса ViewHolder в тело класса HAdapter. (Сделайте то же самое в классе VAdapter). Они не имеют ничего общего с шаблоном ViewHolder. Шаблон ViewHolder используется для оптимизации производительности путем кэширования представлений, возвращаемых findViewById ()

Редактировать 2:

Добавить этот класс в ваш проект:

https://raw.githubusercontent.com/wuakitv/leanback-v17/master/src/android/support/v17/leanback/widget/PersistentFocusWrapper.java

Затем измените свой v_item_view .xml:

<?xml version="1.0" encoding="utf-8"?>

<lolkek.example.com.testrecycler.PersistentFocusWrapper
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <android.support.v7.widget.RecyclerView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/hRecyclerView"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</lolkek.example.com.testrecycler.PersistentFocusWrapper>

Я проверил это, и оно работает.

0
ответ дан burakk 28 January 2019 в 08:19
поделиться

Вам необходимо сохранять состояние / положение каждого горизонтального адаптера RecyclerView. Когда вы прокручиваете вертикальный RecyclerView, вы, очевидно, рециркулируете виды, поэтому, если состояние горизонтального адаптера не сохраняется, при прокрутке вертикального RecyclerView вы окажетесь в каком-то положении для прокручиваемого горизонтального RecyclerView, отличного от того, который вы используете. были до того, как вид был переработан.

0
ответ дан Ricardo 28 January 2019 в 08:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: