大家都知道listview可以使用动态改变item布局。
@Override
public int getItemViewType(int position) {
return type;
}
@Override
public 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);
}
}
这样就可以设置动态布局了,另外监听器需要自己定义回调接口,这里就不赘述了。