package com.lkh.multiadapter;import android.support.annotation.LayoutRes;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import java.util.List;/** * 列表单项布局与数据绑定 * Created by luokanghui on 2017/5/24. */public abstract class ItemViewAdapter { /** * 返回列表单项View,如果View由资源layout加载而来,直接重写{ @link #onGetLayoutId()}即可 * @param parent 父view,一般为RecyclerView * @return 列表单项View */ public View onCreateView(ViewGroup parent){ return LayoutInflater.from(parent.getContext()).inflate(onGetLayoutId() , parent, false); } /** * 当RecyclerViewHolder创建成功后调用,只会调用一次 * @param viewHolder 单项view集合 */ public void onCreate(RecyclerViewHolder viewHolder){ } /** * 返回单项布局的资源id,如果重写了{ @link #onCreateView(ViewGroup)},则此方法可能失效 * @return 单项布局layout id */ @LayoutRes protected abstract int onGetLayoutId(); /** * 把数据与view进行绑定,滑动时都会调用 * @param viewHolder 单项view集合 * @param data 具体数据 * @param position 在列表中的位置 */ public abstract void bindData(RecyclerViewHolder viewHolder, E data, int position); /** * 局部更新时调用 * @param viewHolder 单项view集合 * @param data 具体数据 * @param position 在列表中的位置 * @param payloads 局部更新标志,不会为空(isEmpty()==false) */ public void bindData(RecyclerViewHolder viewHolder, E data, int position, List
卡片1:
package com.lkh.multiadapter.sample;import android.widget.TextView;import com.lkh.multiadapter.ItemViewAdapter;import com.lkh.multiadapter.R;import com.lkh.multiadapter.RecyclerViewHolder;/** * 卡片1实现 * Created by luokanghui on 2019/3/18 */public class SampleOneItemViewAdapter extends ItemViewAdapter { @Override protected int onGetLayoutId() { //布局layout资源id return R.layout.item_one; } @Override public void bindData(RecyclerViewHolder viewHolder, DataOne data, int position) { //根据id获取view TextView tvContent = viewHolder.getView(R.id.tv_content); //数据绑定 tvContent.setText(data.getContent()); }}复制代码
package com.lkh.multiadapter.sample;/** * 卡片1数据 * Created by luokanghui on 2019/3/18 */public class DataOne { private String content; public String getContent() { return content; } public void setContent(String content) { this.content = content; }}复制代码
item_one.xml:
复制代码
卡片2
package com.lkh.multiadapter.sample;import android.widget.TextView;import com.lkh.multiadapter.ItemViewAdapter;import com.lkh.multiadapter.R;import com.lkh.multiadapter.RecyclerViewHolder;/** * 卡片2实现 * Created by luokanghui on 2019/3/18 */public class SampleTwoItemViewAdapter extends ItemViewAdapter { @Override protected int onGetLayoutId() { //布局layout资源id return R.layout.item_two; } @Override public void bindData(RecyclerViewHolder viewHolder, DataTwo data, int position) { //根据id获取view TextView tvNum = viewHolder.getView(R.id.tv_num); //数据绑定 tvNum.setText("num="+data.getNum()); }}复制代码
package com.lkh.multiadapter.sample;/** * 卡片2数据 * Created by luokanghui on 2019/3/18 */public class DataTwo { private int num; public int getNum() { return num; } public void setNum(int num) { this.num = num; }}复制代码
item_two.xml:
复制代码
总Adapter,继承MultiRecyclerViewAdapter
package com.lkh.multiadapter.sample;import com.lkh.multiadapter.ItemViewAdapter;import com.lkh.multiadapter.MultiRecyclerViewAdapter;/** * 多布局adapter,根据不同data及position,使用不同ItemViewAdapter卡片 * Created by luokanghui on 2019/3/18 */public class SampleMultiAdapter extends MultiRecyclerViewAdapter