Android - RecyclerView 项目在方向更改后不可见
Android - RecyclerView items aren't visible after orientation change
我在我的应用程序中使用 Conductor framework。
该应用程序通常固定在 纵向 状态,但我有 2 个 Controllers
使用 ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
并响应设备方向变化
Controller
A - 显示拍摄的图像摘要
Controller
B - 是相机交互
所以当 A 启动时,它会立即启动 B 并在拍摄图像后显示摘要。
A 持有一个使用 FlexboxLayoutManager
的 RecyclerView
(当我尝试用一个简单的 LinearLayoutManager
替换布局管理器时没有任何改变)
我有 3 个工作正常的流程:
- Portrait中持有的设备 -> A 已启动 -> B 已启动启动 -> 拍摄图像 -> B 关闭 -> 图像 Shown in A
- 在Landscape中持有的设备 -> A 已启动 -> B 已启动启动 -> 拍摄图像 -> B 关闭 -> 图像 Shown in A
- Portrait中持有的设备 -> A 已启动 -> B 已启动已启动 -> 设备方向 更改为横向 -> 已拍摄图像 -> 方向 更改为纵向 -> B 已关闭 -> 图片 Shown in A
但是这种情况失败了:
Portrait中持有的设备 -> A 已启动 -> B 已启动启动 -> 设备方向 更改为横向 -> 拍摄图像 -> B 关闭 -> 图像 NOT显示在A
在所有流程中,我看到 adapter
知道新项目,并且 getItemViewType
、onCreateViewHolder
和 onBindViewHolder
被调用到正确的位置
失败的流程实际上是我作为用户最自然的流程:(
- 有谁知道发生了什么事吗?
- 你能建议额外的调查方向吗?
更新:
- 回收器视图定义为
android:layout_height="wrap_content"
- 在使用
LinearLayoutManager
时更改为 android:layout_height="match_parent"
有效(看起来很丑)
- 将其改回
FlexboxLayoutManager
会使之前工作的所有流程失败
所以我现在查看 FlexboxLayoutManager
看看我是否可以轻松解决这个问题 - 我认为我的流程中实际上不需要回收站视图
似乎解决方案只是将 RecyclerView
从 android:layout_height="wrap_content"
更改为 android:layout_height="match_parent"
。
在上面的更新中,我说过它仍然不适用于 FlexboxLayoutManager
,但问题出在我这边(代码注释太多)。
原代码不是我写的,不知道为什么要用wrap_content
我在我的应用程序中使用 Conductor framework。
该应用程序通常固定在 纵向 状态,但我有 2 个 Controllers
使用 ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR
并响应设备方向变化
Controller
A - 显示拍摄的图像摘要Controller
B - 是相机交互
所以当 A 启动时,它会立即启动 B 并在拍摄图像后显示摘要。
A 持有一个使用 FlexboxLayoutManager
的 RecyclerView
(当我尝试用一个简单的 LinearLayoutManager
替换布局管理器时没有任何改变)
我有 3 个工作正常的流程:
- Portrait中持有的设备 -> A 已启动 -> B 已启动启动 -> 拍摄图像 -> B 关闭 -> 图像 Shown in A
- 在Landscape中持有的设备 -> A 已启动 -> B 已启动启动 -> 拍摄图像 -> B 关闭 -> 图像 Shown in A
- Portrait中持有的设备 -> A 已启动 -> B 已启动已启动 -> 设备方向 更改为横向 -> 已拍摄图像 -> 方向 更改为纵向 -> B 已关闭 -> 图片 Shown in A
但是这种情况失败了:
Portrait中持有的设备 -> A 已启动 -> B 已启动启动 -> 设备方向 更改为横向 -> 拍摄图像 -> B 关闭 -> 图像 NOT显示在A
在所有流程中,我看到 adapter
知道新项目,并且 getItemViewType
、onCreateViewHolder
和 onBindViewHolder
被调用到正确的位置
失败的流程实际上是我作为用户最自然的流程:(
- 有谁知道发生了什么事吗?
- 你能建议额外的调查方向吗?
更新:
- 回收器视图定义为
android:layout_height="wrap_content"
- 在使用
LinearLayoutManager
时更改为android:layout_height="match_parent"
有效(看起来很丑) - 将其改回
FlexboxLayoutManager
会使之前工作的所有流程失败
所以我现在查看 FlexboxLayoutManager
看看我是否可以轻松解决这个问题 - 我认为我的流程中实际上不需要回收站视图
似乎解决方案只是将 RecyclerView
从 android:layout_height="wrap_content"
更改为 android:layout_height="match_parent"
。
在上面的更新中,我说过它仍然不适用于 FlexboxLayoutManager
,但问题出在我这边(代码注释太多)。
原代码不是我写的,不知道为什么要用wrap_content