当前位置: 首页 > news >正文

传奇霸主页游东莞seo优化排名

传奇霸主页游,东莞seo优化排名,网站首页原型图,小说网站seo排名怎么做RecycleView刷新某一个Item,或这某一个Item中某一个View。 这样的需求,在实际的开发中是很普遍的。 在数据变化后需要刷新列表。 刷新列表有三种方式: 前两种大家应该很熟,第三中会有点陌生。 那么这三种方式,有什…

RecycleView刷新某一个Item,或这某一个Item中某一个View。

这样的需求,在实际的开发中是很普遍的。

在数据变化后需要刷新列表。

刷新列表有三种方式:

前两种大家应该很熟,第三中会有点陌生。

 那么这三种方式,有什么却别呢?

  public void updateData() {notifyDataSetChanged();}public void updateData(int pos) {notifyItemChanged(pos);}public void updateData(int pos, Object payload) {notifyItemChanged(pos, payload);}

先看第一种:notifyDataSetChanged()

这个就属于暴力刷新了,他会刷新整个可见的item列表。刷新效率很差。我只想要更新某个Item中的TextView,但是这种方式,会导致全部Item列表重新绘制一遍。

    findViewById(R.id.button1).setOnClickListener(v -> {int pos = 0;Person person = list.get(pos);person.name = "update";person.age = 44;adapter.updateData();});public void updateData() {notifyDataSetChanged();}

从日志中可以看出来,这种刷新方式,会把所有的Item重新绘制一遍。

再看第二种刷新方式: notifyItemChanged(pos);

 findViewById(R.id.button2).setOnClickListener(v -> {int pos = 0;Person person = list.get(pos);person.name = "update";person.age = 55;adapter.updateData(pos);});public void updateData(int pos) {notifyItemChanged(pos);}

   这种方式会根据传进来的pos来刷新对应的某一个Item。但是Item中会包含其他的View,

也会导致其他的View跟着刷新,虽然有了较大的优化,但是还是有一些画蛇添足。

看日志:

从日志可以看出,的确刷只刷新了某一个Item。但是整个Item中定义的View也会跟着一起绘制,

会执行onLayout,onMeasure,onDraw三个绘制方式。

我只修改了某个View,只需要重新绘制更新的VIew就行,没有更新的不用跟着计算。

再看第三种方式,

传进去了一个标识,需要在重写onBindViewHolder的重载方法。

 findViewById(R.id.button3).setOnClickListener(v -> {int pos = 0;Person person = list.get(pos);person.name = "payload";person.age = 66;adapter.updateData(pos, "name");});
    public void updateData(int pos, Object payload) {notifyItemChanged(pos, payload);}

 根据传进来的标识,只改变,需要修改的VIew。前提是要修改的View的大小不会变化,只改变状态,因为Item中其他的View不刷新。如果大小改变的话,可能会导致布局跟着变,这时就得需要item去重新计算来绘制了。

 @Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position,             @NonNull List<Object> payloads) {Log.e("nyz", "onBindViewHolder pos " + position);if (!payloads.isEmpty() && payloads.get(0).equals("name")) {Log.e("nyz", "update name");Person person = list.get(position);((MyViewHolder) holder).nameTv.setText(person.name);} else {Log.e("nyz", "update item");super.onBindViewHolder(holder, position, payloads);}}

看日志:

确实只修改了需要修改的View,并没有导致整个View进行重新绘制。

代码下载:https://download.csdn.net/download/niuyongzhi/88382724

http://www.yidumall.com/news/67891.html

相关文章:

  • 专业企业网站开发公司长沙网站优化对策
  • 动态网站留言板怎么做莱阳seo排名
  • 网站推广网站网络推广代理怎么做
  • django做企业级网站如何在百度上添加店铺的位置
  • 国内最好的网站建设公司广州网络推广定制
  • 大朗网站仿做5118
  • 网站添加客服国外搜索引擎入口
  • 做衬衫的作业网站武汉seo服务
  • 杭州市城乡建设委员会的网站买卖平台
  • 网站上广告如何进行seo
  • 出效果图重庆网站seo好不好
  • 软件代理威海seo优化公司
  • 除了做视频网站还能做什么网站qq刷赞网站推广
  • 做网站有哪些平台站长工具怎么关掉
  • 网站的建设百度公司总部地址
  • 免费自制网站建设网店代运营骗局
  • 阳泉网站设计网络做推广公司
  • 自己搭建聊天平台数字营销服务商seo
  • 网络加速器海外扬州整站seo
  • 广州推广型网站建设企业网站建设哪家好
  • 百度宣传做网站多少钱seo流量
  • 常州做网站的公司衡阳seo优化首选
  • 西安 网站建设 费用seo系统培训班
  • 金坛做网站北京seo供应商
  • 邢台做移动网站的公司如何快速推广一个新产品
  • 网站开发语言优缺点腰椎间盘突出压迫神经腿疼怎么治
  • 如何开通网站线上培训课程
  • 哈尔滨网站制作公司哪家好短视频营销成功案例
  • 网站设计外包协议平面设计网站
  • 营销软件网站建设国外新闻最新消息