Intereting Posts
Совместное использование NavigationView со всеми мероприятиями? Закрытие модального диалога в мобильном приложении delphi firemonkey (Android) Как опубликовать новый лицензионный ключ приложения Android? Невозможно удалить виртуальное устройство из Eclipse, android Android lollipop scrollview edge effect color Как определить длинное касание с помощью javascript для Android и iphone? Системный раздел эмулятора Android не занимает места Ionic не может запускать ионную платформу android Как установить заголовок для счетчика, который нельзя выбрать ..? Изменение видимости виджетов на клике Невозможно найти символьную переменную GoogleAuthUtil после обновления до сервисов Google Play 9.0.0 GetActionBar (). SetDisplayHomeAsUpEnabled (true) выбрасывает NullPointerException Добавить пользовательские заголовки, исходящие из веб-сайта android Должен ли ключ API GCM хранить в секрете? Как можно программно настроить процессор моего телефона?

Непрокрутка прокрутки 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> 

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);