@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)
}
}
这样就可以设置动态布局了,另外监听器需要自己定义回调接口,这里就不赘述了。
文/疯狂的米老鼠(简书作者)
原文链接:http://www.jianshu.com/p/9165249da2fa
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
在.xml文件的design界面点击recyclerview右边的小箭头,然后点击ok即可
作用:显示是否完成拖动 *** 作
作用:在拖动时变色来显示当前状态
第三个界面要要用于显示拖动效果,所以要进行相应的修改
添加adapter依赖
将要显示的列表文本及相应功能添加进去
对拖动事件进行监听
配置拖动功能
在/res/values/styles.xml文件里,将
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
改为
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
到此,实验结束
这几天熟悉了RecyclerView的使用以及内部动画机制,有几篇文章做备忘:
RecyclerView本身对添加动画和删除动画支持的很好,但首次加载自定义起来并不容易。目前看来主流的方法:
当Adapter触发 notifyItemRangeInserted()或者notifyItemInserted()的时候, 这个 RecyclerView.ItemAnimator的animateAdd方法将被调用。
其中AnimationItem对应的是对话对应的资源文件,比如从右侧延迟滑动滚入的动画xml,对应的item动画如下:
item_animation_from_right.xml
layoutAnimation如下:
第四种方法参考文章 Enter animation using RecyclerView and LayoutAnimation Part 1: Lists
个人觉得四中方法还是最后一种方法简单方便。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)