怎么动态设置recyclerview的item

怎么动态设置recyclerview的item,第1张

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

}

}

这样就可以设置动态布局了,另外监听器需要自己定义回调接口,这里就不赘述了。

文/疯狂的米老鼠(简书作者)

原文链接: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

个人觉得四中方法还是最后一种方法简单方便。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11189972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存