Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> BaseRecyclerAdapter之添加不同布局(頭部尾部)

BaseRecyclerAdapter之添加不同布局(頭部尾部)

編輯:關於Android編程

最近寫了個Android開源庫「BaseRecyclerViewAdapterHelper」集成了很多常見需求的解決方案,希望大家多多star哦~!

如何使用?

多個不同布局

public class MultipleItemAdapter extends BaseQuickAdapter {
    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值。
- 在onCreateViewHolder()方法裡面根據不同的type來創建不同的ViewHolder
- 在onBindViewHolder()裡面根據不同holder的類型來賦予相對於的數據
- 如果有額外布局(如:頭部尾部)需要修改getItemCount()方法的返回數量

多個不同的布局的實現(三部曲)

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()裡面position-頭部數量,因為不減去的話,那麼數據就會從第二條開始遍歷,所以要注意!

int index = position - getHeaderViewsCount();
convert(baseViewHolder, mData.get(index));

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved