Android模拟器在方向改变时UI崩溃的问题通常是由于Activity重新创建而导致的。为了解决这个问题,可以尝试以下几种方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 保存UI相关的数据到Bundle
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// 从Bundle中恢复UI相关的数据
}
public class MyFragment extends Fragment {
// 在Fragment中定义UI的组件和逻辑
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true); // 保持Fragment实例不会被销毁和重建
}
}
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
if (savedInstanceState == null) {
// 创建并添加Fragment
MyFragment fragment = new MyFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
}
}
}
public class MyViewModel extends ViewModel {
// 在ViewModel中定义和保存UI相关的数据
}
public class MyActivity extends AppCompatActivity {
private MyViewModel mViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
mViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
// 使用mViewModel保存和恢复UI相关的数据
}
}
通过以上方法,可以避免Android模拟器在方向改变时UI崩溃的问题,并正确保存和恢复UI的状态。