@Override
public int getItemViewType(int position){
return type;
}
@Overridepublic int getViewTypeCount() {
return number;
}
当然recyclerview同样可以动态改变item布局
1、继承 RecyclerView.Adapter<RecyclerView.ViewHolder>
public class CommentAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
2、重写 getItemViewType(int position)/**
* 决定元素的布局使用哪种类型
*
* @param position 数据源的下标
* @return 一个int型标志,传递给onCreateViewHolder的第二个参数
*/
@Override
public int getItemViewType(int position) {
return mDatas.get(position).getType();
}
3、在 onCreateViewHolder(ViewGroup parent, int viewType) 判断使用哪一种布局/**
* 渲染具体的ViewHolder*
* @param parent ViewHolder的容器
* @param viewType 一个标志,我们根据该标志可以实现渲染不同类型的ViewHolder
* @return
*/
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {Log.e("terry", "viewType = " + viewType);
View view = null;
if (viewType == COMMENT_FIRST) {view = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_main_first, parent, false);
return new CommentFirstHolder(view);} else if (viewType == COMMENT_SECOND) {
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.comment_main_second, parent, false);
return new CommentSecondHolder(view);
}
return null;}
4、最后在onBindViewHolder(RecyclerView.ViewHolder holder, int position)绑定数据
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {if (holder instanceof CommentFirstHolder) {
......
} else if (holder instanceof CommentSecondHolder) {
......
}}
5、定义对应的ViewHolder类
//第一个ViewHolder
public class CommentFirstHolder extends RecyclerView.ViewHolder {
public CommentFirstHolder(View itemView) {
super(itemView);
}}
//第二个ViewHolder
public class CommentSecondHolder {
public CommentSecondHolder(View itemView) {
super(itemView);
}}
我的具体代码例子如下:
/** * Created by xiaobo 2016/6/24 */ public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements View.OnClickListener { // 数据集 private String[] mDataset; private OnRecyclerViewItemClickListener mOnItemClickListener = null; private int COMMENT_FIRST = 1; private int COMMENT_SECOND = 2; public MyAdapter(String[] dataset) { super(); mDataset = dataset; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { // 创建一个View,简单起见直接使用系统提供的布局,就是一个TextView if (viewType == COMMENT_FIRST) { View viewOne = View.inflate(viewGroup.getContext(), R.layout.item_listview, null); viewOne.setOnClickListener(this); return new FristViewHolder(viewOne); } else if (viewType == COMMENT_SECOND) { View viewTwo = View.inflate(viewGroup.getContext(), R.layout.item_listview_two, null); viewTwo.setOnClickListener(this); return new SecondViewHolder(viewTwo); } return null; } //将数据与界面进行绑定的操作 @Override public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { if (viewHolder instanceof FristViewHolder) { // 绑定数据到ViewHolder上 FristViewHolder holderFrist = (FristViewHolder) viewHolder; holderFrist.mTvItem.setText(mDataset[position]); //将数据保存在itemView的Tag中,以便点击时进行获取 viewHolder.itemView.setTag(mDataset[position]); } else if (viewHolder instanceof SecondViewHolder) { SecondViewHolder holderSecond = (SecondViewHolder) viewHolder; holderSecond.mTvItem2.setText(mDataset[position]); } } /** * 根据position的不同选择不同的布局类型 * COMMENT_FIRST = 1; 类型1 * COMMENT_SECOND = 2; 类型2 */ @Override public int getItemViewType(int position) { if (position%2==0) { return COMMENT_FIRST; }else{ return COMMENT_SECOND; } } //获取数据的数量 @Override public int getItemCount() { return mDataset.length; } @Override public void onClick(View v) { if (mOnItemClickListener != null) { mOnItemClickListener.onItemClick(v, (String) v.getTag()); } } //FristViewHolder,持有每个Item的的所有界面元素 public static class FristViewHolder extends RecyclerView.ViewHolder { public TextView mTvItem; public TextView mTvText; public FristViewHolder(View itemView) { super(itemView); mTvItem = (TextView) itemView.findViewById(R.id.tv_item); mTvText = (TextView) itemView.findViewById(R.id.tv_text); } } //FristViewHolder,持有每个Item的的所有界面元素 public static class SecondViewHolder extends RecyclerView.ViewHolder { public TextView mTvItem2; public TextView mTvText2; public SecondViewHolder(View itemView) { super(itemView); mTvItem2 = (TextView) itemView.findViewById(R.id.tv_item_2); mTvText2 = (TextView) itemView.findViewById(R.id.tv_text_2); } } public static interface OnRecyclerViewItemClickListener { void onItemClick(View view, String mDataset); } public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { mOnItemClickListener = listener; } }
效果图:
具体就是这样了。