我有一个带有多次初始化的活动(片段,共享偏好,服务,ui组件(搜索栏,按钮等)...)并且我不希望在屏幕方向改变时重新启动活动
我使用android:configChanges="keyboardHidden|orientation|screenSize"
找到了一个简单(可行的解决方案),但我的技术经理以这种方式禁止我,因为据他说这是一个不好的做法
为了正确处理屏幕方向变化,还有哪些其他方法?
非常感谢
我的主要活动
@AfterViews
public void afterViews() {
putSharedPrefs();
initializeFragments();
initializeComponents();
initializeSynchronizeDialog();
initDownloadDialog();
}
答案 0 :(得分:5)
您只需为横向模式添加布局即可
您只需要在" res"中添加文件夹 layout-land 。目录并定义您的活动在横向模式下的外观布局
注意 -Keep xml文件名与简单布局文件夹中的名称相同,并且您在活动中使用该名称。它会自动检测您的屏幕方向并相应地应用布局
的 EDIT1 强>
现在从文本视图中保存文本=)让我们假设您的textview在布局xml文件中命名为MyTextView。您的活动需要以下内容:
private TextView mTextView;
private static final String KEY_TEXT_VALUE =" textValue";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTextView = (TextView) findViewById(R.id.main);
if (savedInstanceState != null) {
String savedText = savedInstanceState.getString(KEY_TEXT_VALUE);
mTextView.setText(savedText);
}
@Override
protected void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KEY_TEXT_VALUE, mTextView.getText());
}
基本上,每当Android销毁并重新创建您的Activity以进行方向更改时,它会在销毁之前调用onSaveInstanceState()并在重新创建后调用onCreate()。无论你在onSaveInstanceState的包中保存什么,你都可以从onCreate()参数返回。
因此,您希望在onSaveInstanceState()中保存文本视图的值,并读取它并在onCreate()中填充textview。如果第一次创建活动(不是由于旋转更改),则onCreate()中的savedInstanceState将为null。你也可能不需要android:freezesText =" true"
如果需要,您还可以尝试保存其他变量,因为在销毁和重新创建活动时,您将丢失存储的所有变量。