RecyclerView에서 광고용 레이아웃 설정
6269 단어 안드로이드RecyclerView
목적
RecyclerView 내에 광고 (배너 광고를 가정)를 게재 할 때 광고 레이아웃을 설정하는 방법이 LayoutManager에 따라 다르므로 각 LayoutManager에서 설정하는 방법에 대한 메모
전제
RecyclerView.Adapter의 getItemCount는 광고의 테두리도 포함한 건수를 돌려주어, getItemViewType에서 해당하는 위치가 통상의 아이템인지 광고인지 판단할 수 있도록 되어 있다고 합니다.
LinearLayoutManager
Adapter의 onCreateViewHolder와 onBindViewHolder에서 ViewType별 처리로 나누는 것만.
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE_ADS) {
// 広告用のViewHolderを返す
} else {
// 通常のViewHolderを返す
}
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS) {
// 広告の表示
} else {
// 通常の処理
}
}
GridLayoutManager
LinearLayoutManager에서의 처리에 추가로, GridLayoutManager에 SpanSizeLookup를 설정해, 위치가 광고의 경우, 아이템이 그리드와 같은 스팬을 차지하는 것을 돌려준다.
int colCount = 3;
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), colCount, GridLayoutManager.VERTICAL, false);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS){
return colCount;
} else {
return 1;
}
}
});
StaggeredGridLayoutManager
LinearLayoutManager에서의 처리에 추가로, onBindViewHolder에서 위치가 광고인 경우, ViewHolder의 LayoutParams의 setFullSpan에 true를 설정한다.
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS) {
((StaggeredGridLayoutManager.LayoutParams)holder.itemView.getLayoutParams()).setFullSpan(true);
// 広告の表示
} else {
// 通常の処理
}
}
Reference
이 문제에 관하여(RecyclerView에서 광고용 레이아웃 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/akikuchi/items/bbcbe36a5d1a59eeef7f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
RecyclerView.Adapter의 getItemCount는 광고의 테두리도 포함한 건수를 돌려주어, getItemViewType에서 해당하는 위치가 통상의 아이템인지 광고인지 판단할 수 있도록 되어 있다고 합니다.
LinearLayoutManager
Adapter의 onCreateViewHolder와 onBindViewHolder에서 ViewType별 처리로 나누는 것만.
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE_ADS) {
// 広告用のViewHolderを返す
} else {
// 通常のViewHolderを返す
}
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS) {
// 広告の表示
} else {
// 通常の処理
}
}
GridLayoutManager
LinearLayoutManager에서의 처리에 추가로, GridLayoutManager에 SpanSizeLookup를 설정해, 위치가 광고의 경우, 아이템이 그리드와 같은 스팬을 차지하는 것을 돌려준다.
int colCount = 3;
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), colCount, GridLayoutManager.VERTICAL, false);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS){
return colCount;
} else {
return 1;
}
}
});
StaggeredGridLayoutManager
LinearLayoutManager에서의 처리에 추가로, onBindViewHolder에서 위치가 광고인 경우, ViewHolder의 LayoutParams의 setFullSpan에 true를 설정한다.
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS) {
((StaggeredGridLayoutManager.LayoutParams)holder.itemView.getLayoutParams()).setFullSpan(true);
// 広告の表示
} else {
// 通常の処理
}
}
Reference
이 문제에 관하여(RecyclerView에서 광고용 레이아웃 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/akikuchi/items/bbcbe36a5d1a59eeef7f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ITEM_TYPE_ADS) {
// 広告用のViewHolderを返す
} else {
// 通常のViewHolderを返す
}
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS) {
// 広告の表示
} else {
// 通常の処理
}
}
LinearLayoutManager에서의 처리에 추가로, GridLayoutManager에 SpanSizeLookup를 설정해, 위치가 광고의 경우, 아이템이 그리드와 같은 스팬을 차지하는 것을 돌려준다.
int colCount = 3;
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), colCount, GridLayoutManager.VERTICAL, false);
layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS){
return colCount;
} else {
return 1;
}
}
});
StaggeredGridLayoutManager
LinearLayoutManager에서의 처리에 추가로, onBindViewHolder에서 위치가 광고인 경우, ViewHolder의 LayoutParams의 setFullSpan에 true를 설정한다.
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS) {
((StaggeredGridLayoutManager.LayoutParams)holder.itemView.getLayoutParams()).setFullSpan(true);
// 広告の表示
} else {
// 通常の処理
}
}
Reference
이 문제에 관하여(RecyclerView에서 광고용 레이아웃 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/akikuchi/items/bbcbe36a5d1a59eeef7f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (getItemViewType(position) == ITEM_TYPE_ADS) {
((StaggeredGridLayoutManager.LayoutParams)holder.itemView.getLayoutParams()).setFullSpan(true);
// 広告の表示
} else {
// 通常の処理
}
}
Reference
이 문제에 관하여(RecyclerView에서 광고용 레이아웃 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akikuchi/items/bbcbe36a5d1a59eeef7f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)