編輯:關於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));
相關閱讀:Android開發框架之自定義ZXing二維碼掃描界面並解決取景框拉伸問題此項目源碼地址:請點擊這裡看一下zxing的項目結構,我這裡直接拿過來用的
凱撒密碼1. 介紹凱撒密碼作為一種最為古老的對稱加密體制,在古羅馬的時候都已經很流行,他的基本思想是:通過把字母移動一定的位數來實現加密和解密。明文中的所有字母都在字母表
一、什麼是加殼?加殼是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,做一些額外的工作。大多數病毒就是基於此原理。二、加殼作用加殼的程序可以有效阻止對程序
吸引用戶的眼球,是我們至死不渝的追求;第一時間呈現最有價值的信息,簡明大方,告訴客戶,你的選擇是多麼的明智,這正是你尋覓已久的東西。分組的應用場合還是很多的,有數據集合的