2016-07-21 3 views
17

私は、子カードに展開するカードのリストを含むRecyclerViewを持っています。
各カードのテキストは異なります。ユーザーが子カードをクリックすると、それが展開されてその中のテキストが表示されます。拡張の高さは、カードに含まれるテキストの量に基づいています。Android拡張可能RecyclerView differentカードの高さ

私が使用して、ターゲットの高さを測定してみました:

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

そして(hereを参照)測定した高さにカードを拡大します。 しかし、それはすべてのカードに同じ測定高さを与えます。

ここで(具体的にXamarin versionthisに基づいており、私のコードです:

これは親と子カードを作成し、結合し、メインアダプタ、次のとおりです。

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); 
    } 
} 

私はコードを実行する必要がある場所だと思いますが、他のクラスの他のコードが必要な場合は、喜んで投稿します。上記のリンクを見て、どのように動作するかを参照することもできます。

誰かが私を助けることを願っています。
ありがとうございます!

+0

すべての子供に固定の高さ100を設定します。 –

+0

私はそれを知っています。それが開始高さです。私はカードがクリックされたときにコンテンツをラップするように設定したい。それ、どうやったら出来るの? – amitairos

+0

子ビューの小節の高さを設定しようとします。 –

答えて

7

私はついにこの問題を解決することができました。
私はこれにビューのwrap_contentの高さを測定する方法を変更するために必要な:

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

残りは同じです。
ポストthisありがとうございます。

3

あなたはなぜカードの高さを見つけたいのか分かりません。その代わりに、子カードの高さをテキストの高さに置き換え、子カードを見えなくすることができます。ユーザーがカードをクリックするとすぐに、表示され、同じ高さのテキストが表示されます。

+0

子供のカードを小さな高さでのみ表示したかったので、ユーザーがカードをクリックすると、そのカードが展開されてコンテンツがラップされました。それが厄介なものでした。私の最終的な答えを見てください。とにかく、ありがとう。 – amitairos

関連する問題