如何使用不同的设计为风景和肖像模式不召回该活动的API调用?



我有一些API调用在我的活动和不同的UI设计纵向和横向模式。

我在清单中添加了以下代码,以避免模式更改时活动重新创建。但是用下面的代码,将不支持不同的UI。因此,当从一种模式切换到另一种模式时,两种情况下都会显示相同的UI。

android:configChanges="orientation|screenSize|keyboardHidden"

尝试删除此代码,然后UI按预期工作,但活动在每次旋转上重新创建。我也想避免这种情况。请建议一个更好的解决方案。

和我的活动配置更改处理如下

@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen

if (getResources().getBoolean(R.bool.portrait_only)) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
}
}
}

设置横向布局

res/layout-land/

这将处理屏幕在横向模式下的布局。

并使用viewModel来处理配置更改,如果您对viewModel及其工作方式有任何疑问,请访问此

ViewModel如何在配置更改后存活

当通过设备旋转改变方向时,活动被销毁并重新创建。你阻止不了。尽管你可以通过以下任何方式来节省每次方向改变时额外的api调用-

  • 使用ViewModel和LiveData。ViewModel在方向改变后仍然存在,并且不会在每次方向改变期间重新创建,因此任何需要在方向改变时保存的数据都应该保留在ViewModel中。我强烈建议阅读应用架构指南,以便更好地理解和实现正确的应用架构。
  • 如果你不想实现以上和/或正在寻找一个快速的解决方案,你可以保存你的数据在Bundle覆盖onSaveInstanceState方法,并通过覆盖onRestoreInstanceState恢复它。但如果你的api响应非常大,我不建议这样做。

我建议您遵循第一点,因为这将是解决您的用例的最佳方法。

最新更新