首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FragmentStateAdapter在notifyDataSetChanged之后未重新创建currentFragment

FragmentStateAdapter是Android Jetpack库中的一个类,用于在ViewPager2中管理Fragment的显示和生命周期。当调用notifyDataSetChanged方法后,FragmentStateAdapter会重新绑定数据并更新Fragment的数量,但不会重新创建当前显示的Fragment。

在FragmentStateAdapter中,每个Fragment都有一个唯一的标识符,称为itemId。当调用notifyDataSetChanged方法时,FragmentStateAdapter会比较新旧数据集的itemId,确定哪些Fragment需要被销毁、重新创建或保留。

如果在调用notifyDataSetChanged之后,当前显示的Fragment的itemId在新数据集中仍然存在,FragmentStateAdapter会尝试重用该Fragment,而不是重新创建一个新的Fragment。这样可以提高性能和用户体验,避免不必要的Fragment销毁和创建。

然而,有时候在调用notifyDataSetChanged之后,当前显示的Fragment的itemId在新数据集中不存在,这可能是因为数据集发生了变化或者数据被删除了。在这种情况下,FragmentStateAdapter会销毁当前显示的Fragment,并尝试创建一个新的Fragment来显示新的数据。

总结起来,FragmentStateAdapter在调用notifyDataSetChanged之后,会根据新旧数据集的itemId来决定是否重新创建当前显示的Fragment。如果itemId存在于新数据集中,会重用当前Fragment;如果itemId不存在于新数据集中,会销毁当前Fragment并创建一个新的Fragment。

关于FragmentStateAdapter的更多信息和使用示例,可以参考腾讯云的官方文档:FragmentStateAdapter官方文档

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

学习|Android利用Appintro快速制作启动界面(附源码)

Appintro启动界面 每当我们程序更新时,一般第一次进入程序时会有个快速启动界面,用于介绍程序最新的更新东西,及一些简单的宣传,单独设置View进行播放每次换新就感觉很麻烦,Android中Appintro...Appintro使用核心方法 添加依赖 程序的build.gradle中加入Appintro的依赖项 allprojects { repositories {...isWizardMode) { setOffScreenPageLimit(fragments.size()); } mPagerAdapter.notifyDataSetChanged...Fragment,要生成Fragment有两种方法: 使用Appintro自己的SliderPage 使用自定义布局的Fragment 使用Appintro自已的SliderPage 这个相对来说非常简单,创建...android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment /** * 作者:Vaccae * 创建时间

1.6K10
  • Android开发笔记(一百七十二)第二代翻页视图ViewPager2

    this, 60), 0, Utils.dip2px(this, 60), 0);     cv_content.setClipToPadding(false); // false表示不裁剪下级视图 重新运行测试...撤销刚加的边缘特效代码,再给测试页面的Java代码中补充下面几行:     // ViewPager2支持翻页时展示切换动画     // 创建页面转换器,用于计算切换动画的各项参数     ViewPager2...360); // 设置页面的旋转角度         }     };     vp2_content.setPageTransformer(animator); // 设置二代翻页视图的页面转换器 重新运行测试...原先ViewPager采用的翻页适配器叫做FragmentStatePagerAdapter,而ViewPager2采用了FragmentStateAdapter,两个适配器的名称差了个“Pager”。...比如下面是采用FragmentStateAdapter的新型适配器代码例子: public class MobilePagerAdapter extends FragmentStateAdapter {

    2.3K30

    ViewPager刷新问题原理分析及解决方案(FragmentPagerAdapter+FragementStatePagerAdapter)ViewPager+FragmentPagerAdapte

    简单整理如下: ViewPager+FragmentPagerAdapter为何不能通过setAdapter做到整体刷新 第二次设置PagerAdapter的时候,首先会将原来的Fragment进行清理,之后调用...populate()重建,只是重建的时候并不一定真的重新创建Fragment,如下: public void setAdapter(PagerAdapter adapter) { if (mAdapter...FragmentPagerAdapter如何通过notifyDataSetChanged刷新ViewPager FragmentPagerAdapter中的数据发生改变时,往往要重新将数据设置到Fragment...,或者干脆新建Fragment,而对于用FragmentPagerAdapter的ViewPager来说,只是利用其notifyDataSetChanged是不够的,跟踪源码会发现,notifyDataSetChanged...这里就需要用户手动提供接口变更参数了,自定义的FragmentAdapter覆盖instantiateItem,自己手动获取缓存Fragment,attach之前,将参数给重新设置进去,之后,Fragment

    3.3K20

    ViewPager无限滑动

    最近项目里的一个页面的banner功能出了问题,使用的是viewPager + handler实现的,之前的代码实在是设计的过于复杂,就自己重新实现了一遍。...执行完container.removeView((View) object)后,可以使用一个List来维护回收的View,这样可以避免创建大量的View对象——就像ListView的BaseAdapter...ViewPager.setAdapter(PagerAdapter adapter) 首先把创建好的PagerAdapter对象设置给ViewPager对象,这样,它们就关联了。...不过:PagerAdapter不像BaseAdapter那样,notifyDataSetChanged方法UI表现上是有问题的,建议每次数据发生变化后,直接使用setAdapter重新关联。...有意思的是,onCreate中setAdapter之后,第一次viewPager.setCurrentItem(adapter.getStartPageIndex())并不会引起ANR,应该是onCreate

    2.2K70

    recycleview的优化_recyclerview原理

    这个机制会导致一个问题,启动应用之后屏幕可见范围内,如果只有一张卡片可见,当滚动的时 候,RecyclerView找不到可以重用的view了,它将创建一个新的,因此滑动到第二个feed的时候就会有一定的延时...线程,处理输入事件、动画、布局、记录绘图操作,每一个条目进入屏幕显示前都会被创建和绑定view; 2)渲染(Render)线程把指令送往GPU。...RecyclerView开发工程师将创建和绑定移到前一帧,使UI线程与渲染线程同时工作,一个条目即将进入视野时预取数据。... 25.1 版本中,预取操作被分为单独的创建/绑定操作,比对整组条目操作更容易被纳入 UI 线程的空隙中。...,RecyclerView的缓存复用机制可能导致ViewHolder不会重新创建,也不会重新bindView,这样某些ItemView的图片是View属性动画变换后的图片,导致不是自己想要的结果。

    4.1K21

    Android开发之项目经验分享

    Android开发中,除了基本的理论知识,还需要将所学知识运用到真实的项目中,项目中锻炼自己的分析问题、解决问题的能力,本文将总结一下本人项目中遇到的一些问题,总结成章,与大家共勉~~~ 1、如何拉伸一个图片为一条线...drawable目录下创建一个repeat.xml: <?xml version="1.0" encoding="utf-8"?...对象到数据库 //第一步,将Drawable对象转化为Bitmap对象 Bitmap bmp = (((BitmapDrawable)tmp.image).getBitmap()); //第二步,声明并创建一个输出字节流对象...的数据变化时,采用notifyDataSetChanged()无效。...仔细研究后发现,其实adapter是对list的地址的绑定,而当list重新赋值后,会导致了list指向了新的list的地址。

    69250

    android实现RecyclerView列表单选功能

    本文实例为大家分享了android实现RecyclerView列表单选功能的具体代码,供大家参考,具体内容如下 实现思维 1.首先在一行的xml布局中添加一个选中效果的icon图片,选中的情况下INVISIBLE...具体原理请查看下面贴的代码) PS: RecyclerView的实现全部方法就不贴出来了,本人的博客中有RecyclerView各种实现效果文章 1.首先在一行的xml布局中添加一个选中效果的icon图片,选中的情况下...这样可以避免效果会闪 holder.mListSelect.setVisibility(View.VISIBLE); //刷新界面 notify 通知Data 数据set设置Changed变化 //在这里运行notifyDataSetChanged...会导致下面的onBindViewHolder 重新加载一遍 notifyDataSetChanged(); } }); return holder; } @Override public void onBindViewHolder...holder.mListNameText.setText(deivceListData.getmDeviceListDataNameText()); /* onBindViewHolder 方法可能是class

    79710

    BaseAdapter的notifyDataSetChanged方法

    都用过 BaseAdapter的notifyDataSetChanged()方法,用法很简单,当BaseAdapter的数据更新了,需要更改显示,这时候就要调用notifyDataSetChanged(...好好分析一下如何使用以及为什么要使用notifyDataSetChanged方法。...总结而言,NotifyDataSetChanged就是告诉ListView数据变化了,进行数据改变,setAdapter函数将清空所有的数据,并且重新设置监听和添加View。这点有很大的不同。...(); 其实这里的关键就是设置数据变化表示,然后更新数量,重新布局。...那执行完这段代码之后会执行什么呢?requestLayout();熟悉这个函数的都知道,这个函数的调用会让子控件,也就是当前的ListView重新向父控件请求layout。

    1.1K30

    有关ViewPager使用及解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题

    加入这个jar包之后就可以使用ViewPager类了。...true" android:layout_marginBottom="20dp" android:text="删除" /> 第二步:创建...但是使用中发现,删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。...child view,这种情况下,所有child view位置均为POSITION_NONE,表示所有的child view都不存在,ViewPager会调用destroyItem方法销毁,并且重新生成...更有效地方法: 更为靠谱的方法是因地制宜,根据自己的需求来实现notifyDataSetChanged的功能,比如,仅需要对某个View内容进行更新时,instantiateItem()时,用View.setTag

    72110

    浅谈Android设计模式学习之观察者模式

    ,我们最常用到的控件就是ListView了,而ListView最重要的一个点就是Adapter,我们往ListView添加数据后,我们都会调用一个方法: notifyDataSetChanged(),...跟进这个方法notifyDataSetChanged方法,这个方法定义BaseAdapter中,代码如下: public abstract class BaseAdapter implements ListAdapter...mItemCount; // 获取数据的数量 mItemCount = mAdapter.getCount(); checkFocus(); // 注意这里 : 创建一个一个数据集观察者...mInstanceState = null; } else { rememberSyncState(); } checkFocus(); // 重新布局...AdapterDataSetObserver的onChanged函数中会获取Adapter中数据集的新数量,然后调用ListView的requestLayout()方法重新进行布局,更新用户界面。

    49810
    领券