首先先感谢丰神,核心代码源于他的这篇微博http://blog.csdn.net/cfy137000/article/details/54838608,思路很棒。基于他的代码做了一些改动,实现我所需功能。
先说下我的需求。我的需求是PC端先进行更新数据的管理,然后移动端登录时候会自动访问服务,传入mac值,获取需更新数据的信息。如下图所示:
从服务返回到的是json格式的字符串,我解析后获得一个list<bean>,bean的结构为:
public class OfflineDataBean { private String dataId; private String dataName; private String organizationName; private String mac; private int dataType; private String dataAddtime; private String dataUpdatetime; private String dataPath; private String dataStatus; private String remark; ... }
接下来就是将这个list展示在一个RecyclerView里。在这里我首先将RecyclerView的Adapter和Holder进行了一次封装:
public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder> { //list集合 protected final List<T> mData; protected final Context mContext; //上下文 protected LayoutInflater mInflater; //点击item监听 private OnItemClickListener mClickListener; //长按item监听 private OnItemLongClickListener mLongClickListener; /** * 构造方法 * * @param ctx * @param list */ public BaseRecyclerAdapter(Context ctx, List<T> list) { mData = (list != null) ? list : new ArrayList<T>(); mContext = ctx; mInflater = LayoutInflater.from(ctx); } public void clear() { this.mData.clear(); } /** * 方法中主要是引入xml布局文件,并且给item点击事件和item长按事件赋值 * * @param parent * @param viewType * @return */ @Override public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) { final RecyclerViewHolder holder = new RecyclerViewHolder(mContext, mInflater.inflate(getItemLayoutId(viewType), parent, false)); if (mClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mClickListener.onItemClick(holder.itemView, holder.getPosition()); } }); } if (mLongClickListener != null) { holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { mLongClickListener.onItemLongClick(holder.itemView, holder.getPosition()); return true; } }); } return holder; } /** * onBindViewHolder这个方法主要是给子项赋值数据的 * * @param holder * @param position */ @Override public void onBindViewHolder(RecyclerViewHolder holder, int position) { bindData(holder, position, mData.get(position)); } @Override public int getItemCount() { return mData.size(); } /** * add方法是添加item方法 * * @param pos * @param item */ public void add(int pos, T item) { mData.add(pos, item); notifyItemInserted(pos); } /** * delete方法是删除item方法 * * @param pos */ public void delete(int pos) { mData.remove(pos); notifyItemRemoved(pos); } /** * item点击事件set方法 * * @param listener */ public void setOnItemClickListener(OnItemClickListener listener) { mClickListener = listener; } /** * item长安事件set方法 * * @param listener */ public void setOnItemLongClickListener(OnItemLongClickListener listener) { mLongClickListener = listener; } /** * item中xml布局文件方法 *