在 Android 中,BottomSheet 是一种常见的 UI 组件,用于在屏幕底部显示额外的内容。要处理 BottomSheet 的状态保存,您可以使用以下方法:
创建一个 ViewModel 类,该类将负责管理 BottomSheet 的状态。在这个类中,您可以定义一个 SavedStateHandle 对象,用于存储和管理状态数据。
class BottomSheetViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() { private val _bottomSheetState = MutableLiveData<BottomSheetState>() val bottomSheetState: LiveData<BottomSheetState> get() = _bottomSheetState fun saveBottomSheetState(state: BottomSheetState) { savedStateHandle.set("bottom_sheet_state", state) } fun restoreBottomSheetState(): BottomSheetState? { return savedStateHandle.get("bottom_sheet_state") } }
在您的 Activity 或 Fragment 中,初始化 ViewModel 并恢复 BottomSheet 状态。
class MyActivity : AppCompatActivity() { private lateinit var viewModel: BottomSheetViewModel override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) viewModel = ViewModelProvider(this).get(BottomSheetViewModel::class.java) // 恢复 BottomSheet 状态 val bottomSheetState = viewModel.restoreBottomSheetState() if (bottomSheetState != null) { // 根据状态设置 BottomSheet 的行为 } } }
在您的 BottomSheet 实现中,当状态发生变化时,调用 ViewModel 中的 saveBottomSheetState
方法保存状态。
class MyBottomSheet : BottomSheetBehavior<View>() { private val viewModel: BottomSheetViewModel constructor(context: Context, attrs: AttributeSet) : super(context, attrs) { viewModel = ViewModelProvider(context).get(BottomSheetViewModel::class.java) } fun onStateChanged(view: View, newState: Int) { super.onStateChanged(view, newState) when (newState) { BottomSheetBehavior.STATE_EXPANDED -> { // 当 BottomSheet 展开时保存状态 viewModel.saveBottomSheetState(BottomSheetState.EXPANDED) } BottomSheetBehavior.STATE_COLLAPSED -> { // 当 BottomSheet 折叠时保存状态 viewModel.saveBottomSheetState(BottomSheetState.COLLAPSED) } else -> {} } } }
通过这种方式,您可以确保 BottomSheet 的状态在屏幕旋转或其他配置更改时得到保存和恢复。