0

我目前正在尝试学习使用视图和状态。我通常可以在如下函数中设置它的颜色:

    View mColorRegion = findViewById(R.id.color_region);
    mColorRegion.setBackgroundColor(Color.CYAN);

但是,我似乎无法在onRestoreInstanceState()中设置颜色,因为

     mColorRegion.setBackgroundColor(savedInstanceState.getInt("color"));

但是,使用与 TextView 相同的视图,我能够恢复文本,如下所示:

    TextView mText = (TextView)findViewById(R.id.color_region);
    mText.setText(savedInstanceState.getString("text");

有什么区别,以及如何在onRestoreInstanceState()中设置背景颜色?



编辑:自从原始帖子以来,我注意到两件事:


1)mColorRegion.setBackgroundColor(Color.CYAN)似乎也不适用于onCreate()

2)即使按下按钮时以下函数正确更改了视图颜色,但如果我直接从onRestoreInstanceState()调用它,它也不起作用:

    public void centerButton1(View clickedButton) {
        mColorRegion.setBackgroundColor(Color.CYAN);
    }

唔...

4

2 回答 2

0

许多人不喜欢使用android:configChanges="orientation|screenSize",例如Google 的 Dianne Hackborn。一方面,这将使您的应用程序在多种布局之间切换的过程变得非常困难(例如,如果您想要一种布局用于横向,一种用于纵向),因为您必须完成 Android 通常所做的所有工作在onConfigurationChanged()中自动为您服务。

反正我也遇到过这种问题。我正在创建一个 DialogPreference,并且在旋转时我无法更改onRestoreInstanceState(savedInstanceBundle)中SeekBar的进度......所以如果你不能使用onCreate(savedInstanceBundle)onActivityCreated(savedInstanceBundle)(对于片段) ,这就是我的建议恢复视图对象的状态:

1)创建一个名为“mRestoredBGColor”的私有类成员,

private int mRestoredBGColor = -1;

2)onRestoreInstanceState() 中:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) 
       mRestoredBGColor = savedInstanceState.getInt("key_you_used_in_onSaveInstanceState");
}

3)然后在onResume()中,因为 onRestoreInstanceState() 是在 onStart() 之后,但在 onResume() 之前调用的

@Override
public void onResume(){
   super.onResume();
   if(mColorRegion != null && mRestoredBGColor != -1){
       mColorRegion.setBackgroundColor(mRestoredBGColor);
       mRestoredBGColor = -1; //to make sure it only sets this once per rotation.
   }
}

希望这可以帮助某人。我相信总有另一种方法(除非你想快速旋转 WebViews ......)而不是使用android:configChanges="orientation|screenSize".

于 2013-12-08T00:56:09.790 回答
0

所以我找到了一个“半解决方案”。如果您将以下行添加到AndroidManifest.xml,它将在方向更改期间保留颜色:

     android:configChanges="orientation|screenSize"


但是,这仍然不能回答为什么我可以在onRetoreInstanceState()onCreate()中设置文本而不是颜色...

于 2013-02-10T21:37:25.983 回答