Android 如何在onBindViewHolder()中调整ViewHolder高度?

Android 如何在onBindViewHolder()中调整ViewHolder高度?,android,android-recyclerview,Android,Android Recyclerview,我试图在更改内容后在onBindViewHolder中设置ViewHolder的高度,但它仅在开始时起作用。当它被回收,高度是错误的。我想它保持了之前内容的高度。为什么不重新调整呢?我做错了什么 我的代码(简化): 编辑:我的原始代码比这个复杂一点。我需要调整一个视图的大小以匹配另一个视图的大小。上面的代码经过简化,以便于阅读 编辑2:根据要求,这里是我的XML的简化版本,以理解我为什么要调整高度。我的目标是调整ImageView高度以匹配TextView的高度 <androidx.car

我试图在更改内容后在onBindViewHolder中设置ViewHolder的高度,但它仅在开始时起作用。当它被回收,高度是错误的。我想它保持了之前内容的高度。为什么不重新调整呢?我做错了什么

我的代码(简化):


编辑:我的原始代码比这个复杂一点。我需要调整一个视图的大小以匹配另一个视图的大小。上面的代码经过简化,以便于阅读

编辑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