英文:
Problem with RecyclerView in BottomSheetBehaviour (сontent is not drawn.)
问题
抱歉,我只能提供翻译,不支持代码的处理。以下是您提供的内容的翻译:
伙计们,无法处理这个问题。我正在寻求一些建议。
我有一个带有RecyclerView的BottomSheetBehavior(以及其他界面元素)。RecyclerView可以包含大量内容,即当所有内容都无法完全显示在屏幕上时,它必须滚动。
当RecyclerView加载少量内容(几个元素)时,它会正确绘制所有内容。BottomSheetBehavior 正常工作(链接到截图)。
然而,如果我下载了大量内容,RecyclerView 就不再绘制它(链接到截图)。
我在下面附上了标记代码。
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="data" type=".controls.ControlSelectCategoriesFragment"/>
</data>
<FrameLayout
style="?AppTheme.BottomSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:elevation="4dp"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
tools:context=".controls.ControlSelectDateFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="bottom"
android:background="?attr/AppTheme.ColorBottomSheetBackground"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent">
<!-- 代码 HEADER id/header -->
<RelativeLayout
android:id="@+id/recycler_view1"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/header"
app:layout_constraintBottom_toTopOf="@+id/accept_button">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:adjustViewBounds="true"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" />
</RelativeLayout>
<!-- 代码 BUTTON id/accept_button -->
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</FrameLayout>
</layout>
接下来我附上了向 RecyclerView 添加适配器的代码:
private void prepareData(){
listCategoriesAdapter = new ListCategoriesAdapterV2(parentContext, SessionManager.getInstance().getDataManager().findCategoriesByType(type), R.layout.view_category_hexagonal_item);
listCategoriesAdapter.setModeSelecting(TypeSelectingModeAdapter.Single);
listCategoriesAdapter.setVisibilityDetails(true);
updateRecyclerView();
}
private void updateRecyclerView() {
if (binder != null) {
GridLayoutManager gridLayoutManager = (GridLayoutManager) binder.recyclerView.getLayoutManager();
gridLayoutManager.setSpanCount(Math.min(4, listCategoriesAdapter.getElementsSize()));
binder.recyclerView.setAdapter(listCategoriesAdapter);
}
}
结果是,如果 BottomSheetDialog 不是以全屏方式打开(内容不够多),我的 RecyclerView 可以正常工作 (截图)。如果有很多内容,并且 BottomSheetDialog 以全屏方式打开,那么 RecyclerView 将不会绘制任何内容 (截图)。
请帮我解决这个问题!谢谢。
英文:
guys. Can't deal with the problem. I'm asking for some advice.
I have a BottomSheetBehaviour with RecyclerView inside (and other interface elements).
RecyclerView can contain a lot of content, i.e. it must scroll when all content does not get into the screen.
When little content is loaded into RecyclerView (few elements) it draws everything correctly. BottomSheetBehaviour works properly (link to screenshot).
However, if I download a lot of content, RecyclerView no longer draws it (link to screenshot).
I enclose the markup code below.
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="data" type=".controls.ControlSelectCategoriesFragment"/>
</data>
<FrameLayout
style="?AppTheme.BottomSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:elevation="4dp"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
tools:context=".controls.ControlSelectDateFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="bottom"
android:background="?attr/AppTheme.ColorBottomSheetBackground"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent">
<CODE HEADER id/header>
<RelativeLayout
android:id="@+id/recycler_view1"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/header"
app:layout_constraintBottom_toTopOf="@+id/accept_button">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:adjustViewBounds="true"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" />
</RelativeLayout>
<CODE BUTTON id/accept_button>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</FrameLayout>
</layout>
Below I attach the code that adds an adapter to RecyclerView
private void prepareData(){
listCategoriesAdapter = new ListCategoriesAdapterV2(parentContext, SessionManager.getInstance().getDataManager().findCategoriesByType(type), R.layout.view_category_hexagonal_item);
listCategoriesAdapter.setModeSelecting(TypeSelectingModeAdapter.Single);
listCategoriesAdapter.setVisibilityDetails(true);
updateRecyclerView();
}
private void updateRecyclerView() {
if (binder != null) {
GridLayoutManager gridLayoutManager = (GridLayoutManager) binder.recyclerView.getLayoutManager();
gridLayoutManager.setSpanCount(Math.min(4, listCategoriesAdapter.getElementsSize()));
binder.recyclerView.setAdapter(listCategoriesAdapter);
}
}
As a result, if BottomSheetDialog doesn't open full screen (there is not enough content), my RecyclerView works fine (screenshot). If there is a lot of content and BottomSheetDialog opens in full screen, then RecyclerView doesn't draw anything (screenshot).
Please help me solve the problem! Thanks.
专注分享java语言的经验与见解,让所有开发者获益!
评论