方向更改Android时保存活动状态

前端之家收集整理的这篇文章主要介绍了方向更改Android时保存活动状态前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个aacplayer应用程序,我想保存我的活动的状态,当方向从纵向变化到横向. TextViews看起来不是空的,我试图用这个方法冻结我的textview:
android:freezesText="true"

我的清单:

android:configChanges="orientation"

我也试过这个:

@Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
        setContentView(R.layout.main2);

所以当方向改变为景观时,我可以看到我的layout-land main2.xml,但是我的textview出来,显示为空.流媒体音乐效果很好.当方向更改时,我可以收听,但每次更改设备的方向时,textview中的文本都会消失.

我该怎么办才能解决这个问题呢?

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
....
....

非常感谢你.

解决方法

当您的方向更改时,您不必手动更改为横向布局文件. Android会为您自动执行此操作.当方向更改时,Android会破坏您当前的活动,并再次创建新的活动,这就是您输入文字的原因.

你需要做2件事,假设你想要一个独立的纵向和横向的布局.

>假设您有2个用于纵向和横向的XML布局文件,请将main.xml布局文件放在以下文件夹中:

res / layout / main.xml< - 这将是您的纵向布局
res / layout-land / main.xml< - 这将是您的景观布局 这就是您需要做的所有事情,您不需要触摸清单文件修改android:configChanges =“orientation”或覆盖onConfigurationChanged().实际上,建议您不要触摸到您想要实现的目标.
>现在从文本视图中保存文本=)假设您的文本视图在布局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) {
      CharSequence savedText = savedInstanceState.getCharSequence(KEY_TEXT_VALUE);
      mTextView.setText(savedText);
   }
}

@Override
protected void onSaveInstanceState (Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putCharSequence(KEY_TEXT_VALUE,mTextView.getText());
}

基本上,每当Android破坏并重新创建您的“活动”方向更改时,它会在销毁前调用onSaveInstanceState(),并在重新创建后调用onCreate().无论保存在onSaveInstanceState中的包中,您都可以从onCreate()参数中获取.

所以你想保存在onSaveInstanceState()中的文本视图的值,并读取它并在onCreate()中填充你的文本视图.如果第一次创建活动(不是由于旋转更改),则onCreate()中的savedInstanceState将为null.你也可能不需要android:freezesText =“true”

如果需要,还可以尝试保存其他变量,因为在销毁和重新创建活动时,您将丢失所有存储的变量.

猜你在找的Android相关文章