Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 由SwiperFreshLayout触发时,在RecyclerView中执行LayoutImation时出现问题_Android_Android Layout_Android Recyclerview_Android Animation_Swiperefreshlayout - Fatal编程技术网

Android 由SwiperFreshLayout触发时,在RecyclerView中执行LayoutImation时出现问题

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

我正在尝试使用XML属性android:LayoutImation在我的RecyclerView中执行自定义动画

问题是:当我直接在活动的
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)
}