android - 在带有 GridLayoutManager 的 RecyclerView 中,可扩展项目在缩小后仍占用额外空间
问题描述
链接到视频。使用 LinearLayoutManager 时,我没有这个问题。在将 RecyclerView 项目的可扩展部分的可见性设置为 GONE 之前/之后,我是否需要执行其他步骤?
public class DisplayRouteViewHolder extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder {
private ConstraintLayout parentLayout;
private ImageView dropDownBtn;
private ConstraintLayout cardLayout;
private ConstraintLayout expandLayout;
public DisplayRouteViewHolder(@NotNull View itemView, OnRouteClickListener onRouteClickListener) {
super(itemView);
this.parentLayout = itemView.findViewById(R.id.route_item_parent_layout);
this.dropDownBtn = itemView.findViewById(R.id.dropDownBtn);
this.expandLayout = itemView.findViewById(R.id.expand_layout);
this.cardLayout = itemView.findViewById(R.id.routeCardConstraintLayout);
}
private boolean toggleLayout(boolean isExpanded, View v, ConstraintLayout layoutExpand) {
toggleArrow(v, isExpanded);
if (isExpanded) {
//collapse(layoutExpand);
layoutExpand.setVisibility(View.GONE);
} else {
//expand(layoutExpand);
layoutExpand.setVisibility(View.VISIBLE);
}
return !isExpanded;
}
@Override
public void onBindViewHolder(@NotNull DisplayRouteViewHolder holder, int position) {
TemiRoute currentRoute = routes.get(position);
boolean isPatrolRoute = currentRoute.getIsPatrolRoute();
boolean isContinuousPatrol = currentRoute.getIsContinuousPatrol();
if (isPatrolRoute) {
holder.dropDownBtn.setOnClickListener(btn -> {
boolean isExpanded = toggleLayout(isRouteLayoutsExpanded[position], btn, holder.expandLayout);
isRouteLayoutsExpanded[position] = isExpanded;
});
} else {
holder.dropDownBtn.setVisibility(View.GONE);
holder.cardLayout.setBackground(null);
}
}
xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:padding="6dp"
android:clipToPadding="false"
android:id="@+id/route_item_parent_layout">
<androidx.cardview.widget.CardView
android:id="@+id/routeCard"
android:layout_width="430dp"
android:layout_height="290dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:cardCornerRadius="22dp"
app:cardElevation="8dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/routeCardConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/border_for_patrol_route"
>
<TextView
android:id="@+id/routeTitleTv"
android:layout_width="0dp"
android:layout_height="110dp"
android:fontFamily="@font/roboto_condensed_bold"
android:gravity="left|center_vertical"
android:paddingHorizontal="28dp"
android:paddingVertical="10dp"
android:text="ROUTE TITLE"
android:textColor="@color/black"
android:textSize="36sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.3"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<ImageView
android:id="@+id/dropDownBtn"
android:layout_width="40dp"
android:layout_height="40dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.956"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_drop_down_arrow" />
<TextView
android:id="@+id/routePathTv"
android:layout_width="0dp"
android:layout_height="0dp"
android:paddingLeft="22dp"
android:paddingTop="8dp"
android:layout_marginEnd="16dp"
android:fontFamily="@font/roboto_condensed_regular"
android:text="ROUTE"
android:textColor="@color/black"
android:textSize="22sp"
android:ellipsize="end"
android:maxLines="4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/dropDownBtn"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/routeTitleTv" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/expand_layout"
android:layout_width="400dp"
android:layout_height="150dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/routeCard"
android:clipToPadding="false"
android:background="@drawable/card_for_patrol_route_expanded_layout"
android:elevation="2dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false">
<TextView
android:id="@+id/continuous_patrol_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_condensed_regular"
android:text="Patrolling indefinitely"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.107"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.132">
</TextView>
<CheckBox
android:id="@+id/checkBox_for_continuous_patrol"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/continuous_patrol_textview"
app:layout_constraintEnd_toEndOf="@+id/horizontalScrollView3"
app:layout_constraintStart_toStartOf="@+id/horizontalScrollView3"
app:layout_constraintTop_toTopOf="@+id/continuous_patrol_textview" />
<TextView
android:id="@+id/patrol_count_textview_for_routes_fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/roboto_condensed_regular"
android:text="Patrol Count"
android:textColor="@color/black"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@+id/continuous_patrol_textview"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.874" />
<TextView
android:id="@+id/patrol_count_actual_count"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:gravity="center"
android:hint="9999"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="@+id/patrol_count_textview_for_routes_fragment"
app:layout_constraintEnd_toEndOf="@+id/horizontalScrollView3"
app:layout_constraintStart_toStartOf="@+id/horizontalScrollView3"
app:layout_constraintTop_toTopOf="@+id/patrol_count_textview_for_routes_fragment" />
<TextView
android:id="@+id/speech_for_patrol_route"
android:layout_width="120dp"
android:layout_height="wrap_content"
android:text="Speech announced"
android:textColor="@color/black"
android:fontFamily="@font/roboto_condensed_regular"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@+id/patrol_count_textview_for_routes_fragment"
app:layout_constraintStart_toStartOf="@+id/continuous_patrol_textview"
app:layout_constraintTop_toBottomOf="@+id/continuous_patrol_textview" />
<HorizontalScrollView
android:id="@+id/horizontalScrollView3"
android:layout_width="0dp"
android:layout_height="50dp"
android:fillViewport="true"
app:layout_constraintWidth_percent="0.55"
app:layout_constraintBottom_toBottomOf="@+id/speech_for_patrol_route"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/speech_for_patrol_route"
app:layout_constraintTop_toTopOf="@+id/speech_for_patrol_route">
<TextView
android:id="@+id/speech_for_patrol_route_textview"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:hint="Some speech ..."
android:textSize="16sp" />
</HorizontalScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
(在 SO 上提交此帖子的占位符文本 ................................... ..................................................... ..................................................... ..................................................... .....)
解决方案
推荐阅读
- apache-spark - 如何处理列名中的空格以在 expr 方法中使用 spark 合并函数
- android - 如何通过单击自身内部的按钮使 Android RecyclerView 不可见?
- javascript - 我们可以更改选定点的样式吗?
- bash - 用于替换子字符串的 BASH 正则表达式语法
- android - 如何在 kotlin 中为多个 EditText 创建 TextWatcher 通用类?
- java - IO 类的 EOF 警报值
- c++ - 运算符重载自赋值
- javascript - 从比较数组中返回数组_lodash
- symfony - 如何在 symfony 4.2 中使用 JMSSerializer
- sql - 如何强制 oracle 对每一行执行子查询?