Android開源 - 簡單易用的 RecyclerView.Adapter 封裝庫
RecyclerAdapter
在想著盡可能保留原味,又想簡化代碼工作量的情況下封裝了RecyclerView.Adapter。
Installation
add the dependency to your build.gradle:
compile 'com.github.nukc:recycleradapter:0.1'
Usage
繼承 RecyclerHolder 。 (class RecyclerHolder extends RecyclerView.ViewHolder )
在原有的 ViewHolder 上增加了一個抽象方法 onBindView(T t)。
//NumberItem 是 sample 中的 Model
static class ItemHolder extends RecyclerHolder<NumberItem> {
private TextView mTextView;
private OnItemListener mItemListener;
public ItemHolder(View itemView, OnItemListener listener) {
super(itemView);
mTextView = (TextView) itemView.findViewById(R.id.text);
mItemListener = listener;
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mItemListener != null) {
mItemListener.onItemClick(view, getAdapterPosition());
}
}
});
}
@Override
public void onBindView(NumberItem item) {
mTextView.setText("+" + item.getNumber());
}
}</code></pre>
監聽點擊事件
interface OnItemListener {
void onItemClick(View view, int position);
}
private OnItemListener mItemListener = new OnItemListener() {
@Override
public void onItemClick(View view, int position) {
NumberItem numberItem = mNumberList.get(position);
Toast.makeText(MainActivity.this, "number=" + numberItem.getNumber(), Toast.LENGTH_SHORT).show();
}
};
設置 Adapter
recyclerView.setAdapter(new RecyclerAdapter<NumberItem>(mItemListener) {
@Override
public ItemWrapper getItemHolder(int position) {
// 可獲取到對應的 model ,可根據實際需求返回不一樣的 Item
// NumberItem numberItem = getItem(position);
return new ItemWrapper(R.layout.item, ItemHolder.class);
}
});
About
Adapter 方法說明
對數據操作的方法,最后都會 notify
方法名
備注
getItem(position)
獲取對應的 item
getItemCount()
獲取 item 的數量
getDataList()
獲取數據集合
refresh(dataList)
清空原先的數據再加入新的數據后刷新
add(position, data)
在指定位置插入
add(data)
在最后位置插入
addAll(positionStart, dataList)
在指定開始位置插入一個集合
addAll(dataList)
在最后位置插入一個集合
move(fromPosition, toPosition)
把 fromPosition 的 item 移動到 toPosition
change(position, data)
改變指定位置的數據,然后刷新 item
remove(position)
移除指定位置的 item
clear()
清空
setItemListener(listener)
設置監聽,也可在構造方法中傳入
getItemHolder(position)
獲取指定位置的 ItemWrapper ,該方法由 ItemProvide 接口聲明,繼承 RecyclerAdapter 需要實現該方法
ItemWrapper 說明
該類用于控制 itemView 的 Type
變量成員
備注
mLayoutResId
布局文件Id
mHolderClass
RecyclerHolder 的子類 Class
歡迎大家 PR 、提 issues ,一起加入更多方便實用的方法。
Proguard
-keepclassmembers public class * extends com.github.nukc.recycleradapter.RecyclerHolder {
public <init>(...);
}
Thanks
- StanKocken/EfficientAdapter 封裝用了反射,就是看到這個庫才想到反射的。
License
Copyright 2016, nukc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
本文由用戶 劍皇蕭劍 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!