2つの行にGridLayoutManagerを持つrecyclerViewを作成し、最初の要素を残りの部分よりも大きくする必要があります。結果は次のようになります。 GridLayoutManagerと異なるviewHolderを持つ最初の要素
私はこれを達成することができましたが、これはまったく新しい方法です。私のrecyclerViewアダプタでは、最初の要素のために別のviewHolderを使用します。それは素晴らしい解決策でしたが、2番目の要素は最初の要素の下に行きました。だから私は、最初の要素と同じように固定された高さをrecyclerViewに与えるというトリックを作りました。最初の要素と2番目の要素が重なってしまい、2番目の要素が見えるようにするだけです。
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
switch (viewType) {
case 0:
final View view = inflater.inflate(R.layout.big_item, parent, false);
return new BigViewHolder(view);
case 2:
final View view2 = inflater.inflate(R.layout.normal_item, parent, false);
return new NormalViewHolder(view2);
default:
return null;
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (position == 1) {
holder.itemView.setVisibility(View.GONE);
}}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return 0;
} else return 2;
}
しかし、私は特にこのアプローチが嫌いです。誰かがこれについてより良いアイデアを持っていますか?
['GridLayoutManager.SpanSizeLookup'](https://developer.android.com/reference/android/support/v7/widget/GridLayoutManager.SpanSizeLookup.html)。最初の項目は2、残りは1を返すことができます。 –
@MikeM。私はこれをどのように達成できるかの例を私に教えてもらえますか? setSpanSizeAtPosition()メソッドなどを見つけることができません。ありがとう – Phantom
ああ、ええ、申し訳ありませんが、私は方法を指定するのを忘れました。 'SpanSizeLookup'のサブクラスを作成し、' getSpanSize(int position) 'メソッドを' position == 0 'の場合は 'return 2;'に置き換え、残りの場合は 'return 1;'メソッドをオーバーライドします。次に、 'GridLayoutManager'でそのインスタンスを設定します。あなたは 'OnClickListener'のようにすべて匿名で行うことができます。簡単な例:https://drive.google.com/file/d/1K3HCdetp0M8vT8M55pOO0pr7aMWZHyjJ/view?usp=drivesdk –