두 줄에 GridLayoutManager가있는 recyclerView를 만들고 나머지 요소보다 큰 첫 번째 요소를 만들어야합니다. 결과는 다음과 같아야합니다. GridLayoutManager 및 다른 viewHolder가있는 첫 번째 요소가있는 RecyclerView
나는 이것을 달성 할 수 있었지만 틀에 얽매이지 않았습니다. 내 recyclerView 어댑터에서는 첫 번째 요소에 대해 다른 viewHolder를 사용합니다. 그것은 훌륭한 해결책이었을 것입니다. 그러나 두 번째 요소는 첫 번째 요소 아래로 갔을 것입니다. 그래서 저는 recyclerView에 첫 번째 요소와 동일한 고정 높이를 부여하는 트릭을 만들었습니다. 첫 번째 요소와 두 번째 요소가 겹칠 것이고 두 번째 요소의 가시성을 사라지게 할 것입니다.
@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. –