私は、子カードに展開するカードのリストを含むRecyclerViewを持っています。
各カードのテキストは異なります。ユーザーが子カードをクリックすると、それが展開されてその中のテキストが表示されます。拡張の高さは、カードに含まれるテキストの量に基づいています。Android拡張可能RecyclerView differentカードの高さ
私が使用して、ターゲットの高さを測定してみました:
view.Measure(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
そして(hereを参照)測定した高さにカードを拡大します。 しかし、それはすべてのカードに同じ測定高さを与えます。
ここで(具体的にXamarin version)thisに基づいており、私のコードです:
これは親と子カードを作成し、結合し、メインアダプタ、次のとおりです。
public class HalachaExpandableAdapter : ExpandableRecyclerAdapter<HalachaParentViewHolder, HalachaChildViewHolder>, View.IOnClickListener
{
LayoutInflater _inflater;
bool expand;
int targetHeight;
bool wave = false;
public HalachaExpandableAdapter(Context context, List<IParentObject> 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);
}
}
私はコードを実行する必要がある場所だと思いますが、他のクラスの他のコードが必要な場合は、喜んで投稿します。上記のリンクを見て、どのように動作するかを参照することもできます。
誰かが私を助けることを願っています。
ありがとうございます!
すべての子供に固定の高さ100を設定します。 –
私はそれを知っています。それが開始高さです。私はカードがクリックされたときにコンテンツをラップするように設定したい。それ、どうやったら出来るの? – amitairos
子ビューの小節の高さを設定しようとします。 –