ОК, кажется ложным предупреждением. Это не было связано с долотостью, было просто другое DLL, которое не зависит от freetype. Однако сообщения об ошибках могут быть более полезными.
Пожалуйста, удалите
android:focusableInTouchMode="true"
android:focusable="true"
и дайте мне знать статус.
Добавьте это в ваш класс 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:
Добавить этот класс в ваш проект:
Затем измените свой 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>
Я проверил это, и оно работает.
Вам необходимо сохранять состояние / положение каждого горизонтального адаптера RecyclerView. Когда вы прокручиваете вертикальный RecyclerView, вы, очевидно, рециркулируете виды, поэтому, если состояние горизонтального адаптера не сохраняется, при прокрутке вертикального RecyclerView вы окажетесь в каком-то положении для прокручиваемого горизонтального RecyclerView, отличного от того, который вы используете. были до того, как вид был переработан.