Android 如何在onBindViewHolder()中调整ViewHolder高度?
我试图在更改内容后在onBindViewHolder中设置ViewHolder的高度,但它仅在开始时起作用。当它被回收,高度是错误的。我想它保持了之前内容的高度。为什么不重新调整呢?我做错了什么 我的代码(简化):Android 如何在onBindViewHolder()中调整ViewHolder高度?,android,android-recyclerview,Android,Android Recyclerview,我试图在更改内容后在onBindViewHolder中设置ViewHolder的高度,但它仅在开始时起作用。当它被回收,高度是错误的。我想它保持了之前内容的高度。为什么不重新调整呢?我做错了什么 我的代码(简化): 编辑:我的原始代码比这个复杂一点。我需要调整一个视图的大小以匹配另一个视图的大小。上面的代码经过简化,以便于阅读 编辑2:根据要求,这里是我的XML的简化版本,以理解我为什么要调整高度。我的目标是调整ImageView高度以匹配TextView的高度 <androidx.car
编辑:我的原始代码比这个复杂一点。我需要调整一个视图的大小以匹配另一个视图的大小。上面的代码经过简化,以便于阅读 编辑2:根据要求,这里是我的XML的简化版本,以理解我为什么要调整高度。我的目标是调整ImageView高度以匹配TextView的高度
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/imageView"
app:layout_constraintStart_toStartOf="parent"
/>
<ImageView
android:id="@+id/imageView"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@imageView" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
编辑3:我现在刚将高度设置为固定值。无论如何,计算高度对性能有很大影响。可笑的是,在安卓系统中,要让布局响应起来是多么困难
提前感谢。只需在XML文件中将文本视图的高度设置为
wrap\u content
。然后按如下所示更改BindViewHolder上的
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mMyView.setText(holder.mItem.getValue());
}
TextView的高度将根据其内容进行相应更改。只需在其XML文件中将TextView的高度设置为wrap\u content
。然后按如下所示更改BindViewHolder上的
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mItem = mValues.get(position);
holder.mMyView.setText(holder.mItem.getValue());
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
//this is called when you scroll items
//this will reset to origin xml default items
//here heightChanged is the status , set true if changed
if(heightChanged){
//height according to logic
}else{
//do nothing
}
}
TextView的高度将根据其内容进行相应更改
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
//this is called when you scroll items
//this will reset to origin xml default items
//here heightChanged is the status , set true if changed
if(heightChanged){
//height according to logic
}else{
//do nothing
}
}
似乎项目的高度彼此不同,请尝试为已更改的高度添加状态(编写日志以了解每个视图的高度,您将了解如何解决此问题)
似乎项目的高度彼此不同,请尝试为已更改的高度添加状态(写入日志以了解每个视图的高度,您将了解如何解决此问题)您必须动态设置Viewholder的高度。只需使用
public class ViewHolder extends RecyclerView.ViewHolder {
final View mView;
final TextView mMyView;
ViewHolder(View view) {
super(view);
mView = view;
mMyView= view.findViewById(R.id.myView);
view.setMinimumHeight(600); // 600 you can type you height that you want...
}
}
您必须动态设置Viewholder的高度。只需使用
public class ViewHolder extends RecyclerView.ViewHolder {
final View mView;
final TextView mMyView;
ViewHolder(View view) {
super(view);
mView = view;
mMyView= view.findViewById(R.id.myView);
view.setMinimumHeight(600); // 600 you can type you height that you want...
}
}
我的原始代码比这要复杂一点。我需要调整一个视图的大小以匹配另一个视图的大小。上面的代码经过简化以便于阅读。请共享项目的XML文件。是否尝试将imageView的高度更改为“匹配父级”
?仅适用于固定的父级高度,如果可能的话,我希望使用换行内容。我的原始代码比这要复杂一些。我需要调整一个视图的大小以匹配另一个视图的大小。上面的代码经过简化以便于阅读。请共享项目的XML文件。是否尝试将imageView的高度更改为match\u parent
?仅适用于固定的父级高度,如果可能,我希望使用wrap\u内容。RecyclerView.LayoutManager已选择Size(),这可能会对您有所帮助。recyclerview.sethasfixed=FalseCyclerView.LayoutManager选择了可能对您有帮助的Size()。recyclerview.sethasfixed=false