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()で背景色を設定するにはどうすればよいですか?



編集:元の投稿以来、私は2つのことに気づきました:


1) onCreate()mColorRegion.setBackgroundColor(Color.CYAN)でも動作しないようです。

2) 次の関数は、ボタンが押されたときにビューの色を正しく変更しますが、 onRestoreInstanceState()から直接呼び出すと機能しません。

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

うーん...

4

2 に答える 2

0

だから私は「半分の解決策」を見つけました。次の行をAndroidManifest.xmlに追加すると、向きの変更時に色が保持されます。

     android:configChanges="orientation|screenSize"


ただし、onRetoreInstanceState()またはonCreate()でテキストを設定できるのに色を設定できない理由はまだわかりません...

于 2013-02-10T21:37:25.983 に答える
0

Google の Dianne Hackborn のandroid:configChanges="orientation|screenSize"ように、多くの人が の使用に眉をひそめています。1 つには、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.
   }
}

これが誰かに役立つことを願っています。. android:configChanges="orientation|screenSize".

于 2013-12-08T00:56:09.790 に答える