方向改变android时保存活动状态

ale*_*tkd 20 android

我有一个aacplayer应用程序,我希望在方向从纵向更改为横向时保存我的活动状态.TextViews似乎不是空的,我尝试使用以下方法冻结我的textview:

android:freezesText="true"
Run Code Online (Sandbox Code Playgroud)

我的清单:

android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)

我也试过这个:

@Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
        setContentView(R.layout.main2);
Run Code Online (Sandbox Code Playgroud)

因此,当方向更改为横向时,我可以看到我的layout-land main2.xml,它可以工作,但我的textview出来并显示为空.流媒体音乐很棒.我可以在方向更改时收听它,但每次更改设备的方向时,文本视图中的文本都会消失.

我应该怎么做才能解决这个问题,以便保存状态?

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
....
....
Run Code Online (Sandbox Code Playgroud)

非常感谢你.

hiB*_*Lee 58

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

假设您需要单独的纵向和横向布局,则需要执行两个部分.

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

    res/layout/main.xml < - 这将是你的肖像布局
    res/layout-land/main.xml < - 这将是你的横向布局

    这就是您需要做的所有事情,您无需触摸清单文件即可修改android:configChanges="orientation"或覆盖onConfigurationChanged().实际上,建议您不要触摸它,因为您要实现的目标.

  2. 现在从文本视图中保存文本=)让我们假设您的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) {
          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());
    }
    
    Run Code Online (Sandbox Code Playgroud)

基本上,每当Android销毁并重新创建您的Activity以进行方向更改时,它会onSaveInstanceState()在销毁之前调用并在重新创建onCreate()后调用.无论您在onSaveInstanceState中保存哪些内容,都可以从onCreate()参数中获取.

因此,您希望保存文本视图的值onSaveInstanceState(),并在onCreate()中读取并填充textview.如果第一次创建活动(不是由于旋转更改),savedInstanceState将为null onCreate().你也可能不需要android:freezesText="true"

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

  • 如果您还没有这样做,那么进行aac播放的对象应该在服务中运行,而不是在您的活动中运行.您还可以使用片段将aac作为保留的单独片段播放,如果您有兴趣采用该方法,可以在此处阅读有关片段的更多信息http://developer.android.com/guide/components/fragments.html (2认同)

Álv*_*ero 0

我在KOTLIN中使用static var / val :

class MyFragment : Fragment()
{
     //all my code
     //access to static vars -> MyStaticClass.hello
}

class MyStaticClass 
{
    companion object {
        var hello: String = "Static text"
        var number_static: Int = 0
    }
}
Run Code Online (Sandbox Code Playgroud)