Android 由SwiperFreshLayout触发时,在RecyclerView中执行LayoutImation时出现问题
我正在尝试使用XML属性android:LayoutImation在我的RecyclerView中执行自定义动画 问题是:当我直接在活动的Android 由SwiperFreshLayout触发时,在RecyclerView中执行LayoutImation时出现问题,android,android-layout,android-recyclerview,android-animation,swiperefreshlayout,Android,Android Layout,Android Recyclerview,Android Animation,Swiperefreshlayout,我正在尝试使用XML属性android:LayoutImation在我的RecyclerView中执行自定义动画 问题是:当我直接在活动的onCreate()中填充适配器时,动画会正常触发。但是,当我尝试从swiperFreshLayout.setOnRefreshListener填充我的recyclerView时,动画未正确触发 我不知道怎么了 依赖关系 XML文件 活动XML: 简化版中的 此代码将正确触发布局\u动画\u输入\u向上动画: override fun onCreate(sav
onCreate()
中填充适配器时,动画会正常触发。但是,当我尝试从swiperFreshLayout.setOnRefreshListener
填充我的recyclerView时,动画未正确触发
我不知道怎么了
依赖关系
XML文件
活动XML:
简化版中的
此代码将正确触发布局\u动画\u输入\u向上动画:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_post_list)
val adapter = PostsAdapter()
postListRecyclerView.adapter = adapter
val dummyData = Post(1, "Title", "Body", 1, "Name")
val postList = listOf(dummyData, dummyData, dummyData, dummyData, dummyData, dummyData, dummyData)
adapter.submitList(postList)
}
此代码不会触发布局\u动画\u输入\u向上动画:
override fun onCreate(savedInstanceState: Bundle?) {
postListSwipeRefreshLayout.setOnRefreshListener {
val adapter = PostsAdapter()
postListRecyclerView.adapter = adapter
val dummyData = Post(1, "Title", "Body", 1, "Name")
val postList = listOf(dummyData, dummyData, dummyData, dummyData, dummyData, dummyData, dummyData)
adapter.submitList(postList)
}
}
在这两个代码片段中(基本相同),我认为RecyclerView将从空状态变为填充状态。如果我在setOnRefreshListener
回调中或在onCreate
中填充适配器,UI透视图是否有任何差异
编辑:上面的代码片段与原始代码库不同,只是为了便于解释。我不想在这个问题上了解性能。我想知道为什么动画在第二个代码段中不起作用,而在第一个代码段中效果很好。基本上第一个代码段只有在提交刷新列表时才起作用,即:
postListSwipeRefreshLayout.setOnRefreshListener {
adapter.submitList(postList)
}
第二段代码不应触发动画,因为每次刷新布局时,都会创建一个新的适配器实例,使适配器无法观察到更改
我不知道为什么每次刷新布局时都要创建一个新实例,但是这会消耗无用实例的内存
总之:您应该只创建一次实例,并尽可能重复使用它,而不是创建新实例。你好,Ibrahim,感谢您的回复。上面的代码片段与原始代码库不同,只是为了让解释更简单(我在帖子中添加了这一信息)。我在这里的目的是理解为什么动画在第一个片段中工作,而不是在第二个片段中工作,考虑到在这两种情况下,RecyclerView都从空状态变为填充状态。我尝试过使用适配器的一个实例,但仍然存在相同的问题=(@PhellipeSilva嗯,我认为这里没有太多的潜力,您正在创建新的适配器,并将新适配器实例设置为recycleView,以产生非动画行为。如果您提交了不同的列表项,则只在onRefresh
中提交列表应该可以。
postListSwipeRefreshLayout.setOnRefreshListener {
adapter.submitList(postList)
}