在 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 的狀態在屏幕旋轉或其他配置更改時得到保存和恢復。