Android Expandable RecyclerView不同的卡高

我有一个包含卡片列表的RecyclerView,每个卡片都会扩展为子卡片。
每张卡片都有不同的文字。 我希望当用户点击子卡时,它会展开以显示内部文本。 扩展高度取决于卡包含的文本量。

我尝试使用以下方法测量目标高度:

view.Measure(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent); 

然后将卡扩展到Measured Height(参见此处 )。 但是,它为所有卡提供相同的测量高度。

这是我的代码,它基于此 (更具体地说是Xamarin版本 ):

这是主适配器,它创建并绑定父卡和子卡:

 public class HalachaExpandableAdapter : ExpandableRecyclerAdapter, View.IOnClickListener { LayoutInflater _inflater; bool expand; int targetHeight; bool wave = false; public HalachaExpandableAdapter(Context context, List itemList) : base(context, itemList) { _inflater = LayoutInflater.From(context); } public override void OnBindChildViewHolder(HalachaChildViewHolder childViewHolder, int position, object childObject) { var halachaChild = (HalachaChild)childObject; childViewHolder.halachaChildTitle.Text = halachaChild.Title.ToString(); targetHeight = childViewHolder.halachaChildCard.Height; childViewHolder.halachaChildCard.LayoutParameters.Height = 100; childViewHolder.halachaChildCard.SetOnClickListener(this); expand = childViewHolder.expand; } public override void OnBindParentViewHolder(HalachaParentViewHolder parentViewHolder, int position, object parentObject) { var halacha = (HalachaItem)parentObject; parentViewHolder._halachaTitleTextView.Text = halacha.Title(); parentViewHolder._halachaContentTextView.Text = halacha.Content; if (halacha.ChildObjectList.Count == 1) wave = true; } public void OnClick(View v) { if (v.Height == 100) { AnimationCollapse anim = new AnimationCollapse(v, targetHeight, 100); anim.Duration = 300; v.StartAnimation(anim); expand = false; } else { AnimationCollapse anim = new AnimationCollapse(v, 100, v.Height); anim.Duration = 300; v.StartAnimation(anim); expand = true; } } public override HalachaChildViewHolder OnCreateChildViewHolder(ViewGroup childViewGroup) { var view = _inflater.Inflate(Resource.Layout.halachotListItem, childViewGroup, false); return new HalachaChildViewHolder(view); } public override HalachaParentViewHolder OnCreateParentViewHolder(ViewGroup parentViewGroup) { var view = _inflater.Inflate(Resource.Layout.halachotListHeader, parentViewGroup, false); wave = false; return new HalachaParentViewHolder(view); } } 

我认为这是需要完成代码的地方,但是如果你需要其他类的其他代码,我很乐意发布它们。 您还可以查看上面的链接,以了解其工作原理。

希望可以有人帮帮我。
谢谢!

我终于设法解决了这个问题。
我需要改变我测量视图的wrap_content高度的方式:

 v.Measure(MeasureSpec.MakeMeasureSpec(v.Width, MeasureSpecMode.Exactly), MeasureSpec.MakeMeasureSpec(ViewGroup.LayoutParams.WrapContent, MeasureSpecMode.AtMost)); 

其余的都是一样的。
感谢这篇文章。

我不知道为什么你要find卡的高度,而你只需将子卡的高度换成文本的高度,并使子卡不可见,只要用户点击一张卡,子卡的可见性就会变为可见和卡与其文本相同的高度将出现!