您的位置:首页 > 移动开发 > Android开发

关于Android动态改变recyclerview的item的布局

2016-09-05 09:39 645 查看
Recyclerview 的多个布局,根据不同位置,加载不同的布局


Android动态改变recyclerview的item的布局

字数340 阅读6613 评论2 喜欢10

大家都知道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);
}
}


这样就可以设置动态布局了,另外监听器需要自己定义回调接口,这里就不赘述了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: