BaseRecyclerAdapter의 다른 레이아웃 추가(머리 꼬리)
5133 단어 안드로이드 코드 최적화 편RecyclerView 둘러보기
효과가 어떻습니까?
어떻게 사용합니까?
여러 개의 다른 레이아웃
public class MultipleItemAdapter extends BaseQuickAdapter<String> {
private final int TEXT_TYPE = 1;
private int mTextLayoutResId;
public MultipleItemAdapter(Context context, List data, int... layoutResId) {
super(context, layoutResId[0], data);
mTextLayoutResId = layoutResId[1];
}
@Override
protected int getDefItemViewType(int position) {
if (position % 2 == 0)
return TEXT_TYPE;
return super.getDefItemViewType(position);
}
@Override
protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) {
if (viewType == TEXT_TYPE)
return new TextViewHolder(getItemView(mTextLayoutResId, parent));
return super.onCreateDefViewHolder(parent, viewType);
}
@Override
protected void onBindDefViewHolder(BaseViewHolder holder, String item) {
if (holder instanceof TextViewHolder)
holder.setText(R.id.tv, item);
}
@Override
protected void convert(BaseViewHolder helper, String item) {
helper.setImageUrl(R.id.iv, item);
}
public class TextViewHolder extends BaseViewHolder {
public TextViewHolder(View itemView) {
super(itemView.getContext(), itemView);
}
}
}
머리 꼬리 추가
mQuickAdapter.addHeaderView(getView());
mQuickAdapter.addFooterView(getView());
원리 분석
여러 종류의 레이아웃을 정의해야 한다면 다음과 같은 몇 가지를 알아야 한다. - getItemViewType () 방법을 다시 쓰고 수요 규칙에 따라 type 값을 제시해야 한다. -onCreate ViewHolder() 방법에서 서로 다른 type에 따라 서로 다른 ViewHolder를 생성합니다 - onBind ViewHolder()에서 서로 다른holder의 유형에 따라 상대적인 데이터를 부여합니다 - 추가 레이아웃(예를 들어 머리 꼬리)이 있으면 getItem Count() 방법의 반환 수량을 수정해야 합니다
여러 개의 서로 다른 구조의 실현(삼부곡)
1. 다시 썼다
getDefItemViewType()
방법은 바로 부류getItemViewType()
안의 방법이다. 위에서 말한 바와 같이 페이지의 수요에 따라 규칙을 만든다. 위의 UI는 TextView와 ImageView가 교체되기 때문에 이런 규칙을 썼다if (position % 2 == 0)
. 그들이 교체해서 표시할 수 있도록 보증한다.2. type이 완성되었습니다. 다음은 호출onCreateDefViewHolder()
입니다. 위의 type에 따라 서로 다른 ViewHolder를 만듭니다. 3.다음에 onBindDefViewHolder()
를 호출하여 위에서 만든 ViewHolder의 유형에 따라 해당하는 값을 부여합니다.머리와 꼬리 추가(추가 레이아웃)
위의 기초 위에서 다시 쓰기
getItemCount()
원래 데이터량에 추가 레이아웃의 수량을 더하면 코드는 다음과 같다.@Override
public int getItemCount() {
int i = mNextLoadEnable ? 1 : 0;
return mData.size() + i + getHeaderViewsCount() + getFooterViewsCount();
}
주의: 머리를 추가하려면 원
onBindViewHolder()
에 포지션-머리 수량을 넣어야 합니다. 빼지 않으면 데이터가 두 번째부터 옮겨다니기 때문에 주의하세요!int index = position - getHeaderViewsCount();
convert(baseViewHolder, mData.get(index));
뜻밖의 수확
국제 친구의 가맹!
매번 조금씩 수확할 때마다 계속해서 더 많은 기능을 확장하여'Base Recycler View Adapter Helper'를 사용하고 배울 수 있도록 합니다.