Intereting Posts
Не удается добавить текст в файл Android Lollipop прекратил действие ActionBar, как мне перенести приложение, которое использует ActionBar и Tabs? Пространство между клавиатурой и EditText в Android Разная панель инструментов для фрагментов и Навигационный ящик Показать мягкую клавиатуру при активации панели поиска при помощи SearchView Отменить все заявки на Volley Java.lang.SecurityException: требуется READ_PHONE_STATE: ни пользователь 10210, ни текущий процесс .. только в телефонах HTC Как изменить стиль андроида «принудительно закрыть окно»? AccountAuthenticatorActivity и фрагменты Перехват телефонных звонков для отображения информации о контакте Поддержка азербайджанского языка Android 2.2? Как предотвратить Android Market от JPEG-сжатия рекламного графического PNG? Android: передача параметров в Activity из AndroidManifest.xml AsyncTask.onCancelled () не вызывается после отмены (true) URL-адрес файла совместного доступа Dropbox

Непрокрутка прокрутки RecyclerView в Android SDK 23

Я реализую RecyclerView внутри ScrollView . Чтобы иметь только одно поведение прокрутки на всей странице, я реализую версию NonScrollRecyclerView . Реализация осуществляется следующим образом:

 public class NonScrollRecyclerView extends RecyclerView { public NonScrollRecyclerView(Context context) { super(context); } public NonScrollRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); } public NonScrollRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean dispatchTouchEvent(MotionEvent ev){ if(ev.getAction() == MotionEvent.ACTION_MOVE) return true; return super.dispatchTouchEvent(ev); } } 

Как только я обновляю свои настройки сборки и цели до SDK 23, у меня проблемы с прокруткой страницы, содержащей NonScrollRecyclerView . Конкретная проблема заключается в том, что страница прокручивается до тех пор, пока я не доберусь до части просмотра ресайклера, и как только я прокручу это представление, я больше не могу прокручивать ни вверх, ни вниз.

Я DONOT столкнулся с этой проблемой с SDK 22 и ниже

Мой xml выглядит следующим образом:

XML @layout/rv содержит просмотр ресайклера

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background_gray"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/background_gray" android:orientation="vertical"> <include layout="@layout/row_mall_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/cv_mall_header" android:layout_marginTop="8dp"/> <include layout="@layout/row_mall_shops" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/cv_mall_shops" android:layout_marginTop="8dp"/> <include layout="@layout/row_mall_coupons" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/cv_mall_coupons" android:layout_marginTop="8dp"/> <include layout="@layout/rv" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/cv_mall_feeds" android:layout_marginTop="8dp"/> </LinearLayout> </ScrollView> 

XML – @ layout / rv

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/background_gray" android:id="@+id/ll_mall_feeds"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/white" android:paddingTop="6dp" android:paddingBottom="6dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_feedcount" android:textColor="@color/semi_theme_blue" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginLeft="12dp" android:layout_centerVertical="true" /> </RelativeLayout> <com.project.ui.NonScrollRecyclerView android:id="@+id/nrv" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="@android:color/transparent" android:listSelector="@android:color/transparent" /> </LinearLayout> 

Solutions Collecting From Web of "Непрокрутка прокрутки RecyclerView в Android SDK 23"

RecyclerView и ListView не рекомендуются внутри ScrollView, поскольку высоты элементов не вычисляются при визуализации ScrollView. Это означает, что ваш адаптер не может быть заполнен, когда отображается ScrollView, а позже, когда RecyclerView будет уведомлен об изменениях данных (например, при инициализации вашего адаптера), невозможно пересчитать высоты элементов.

Это действительно боль в шее, потому что вы должны попытаться вычислить высоты элементов, и это никогда не бывает точным, поэтому у вас будут расхождения при отображении ListView или RecyclerView внутри ScrollView. Некоторые примеры того, как вычислять высоты элементов, можно проверить здесь и здесь .

Мой совет состоит в том, чтобы превратить RecyclerView в LinearLayout и добавить элементы программно, поэтому вы эмулируете поведение ListView или RecyclerView:

 LinearLayout layout = (LinearLayout) rootView.findViewById(R.id.files); layout.removeAllViews(); for (int i = 0; i < fileAdapter.getCount(); i++) { final View item = fileAdapter.getView(i, null, null); item.setClickable(true); item.setId(i); item.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { fileContentRowPosition = v.getId(); # Your click action here } }); layout.addView(item); } 

Вот его XML с определением файлов:

 <ScrollView android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="match_parent"> ... <LinearLayout android:id="@+id/files" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:orientation="vertical"> </LinearLayout> </ScrollView> 

Здесь можно проверить весь код Java и весь макет здесь .

С другой стороны, если вы все еще хотите продолжить свою реализацию и в отношении своей проблемы, вы можете проверить эту статью о работе с прокручиваемыми элементами управления в Scrollview

С наилучшими пожеланиями,

Только для одной прокрутки на всей странице вы можете использовать NestedScrollView вместо ScrollView и установить recyclerView.setNestedScrollingEnabled (false);