当前位置: 首页 > 工具软件 > Expandable > 使用案例 >

android expandablerecycle 动画,Android Expandable RecyclerView不同卡高

万高畅
2023-12-01

我有一个包含卡片列表的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);

}

}

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

希望可以有人帮帮我.

谢谢!

 类似资料: