Bundle
画面の回転や他アプリが前面起動した際に変数が初期化されてしまう為、
事前に値を保存、それを取り出すときに使用します。
事前に値を保存、それを取り出すときに使用します。
しかし筆者は上記保存機能は使用していません。
あたかも初期設定かのように決まり文句でついてきます。
public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) {//ここです。 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
通常何も設定しない場合savedInstanceStateにはnullが返ってくるようです。
でも、画面回転等で回避したい場合が出てきます。
では実際にBundleを使って保存、取り出しをしてみます。
- void onSaveInstanceState(Bundle outState) //保存する
- void onRestoreInstanceState(Bundle savedInstanceState) //復帰する
下記ソースでは"Hello World!"を"こんにちわ世界!"に切り替えてます。
図1 縦:初期画面 |
図2 縦:ボタンクリック後 |
この画面(図2)を回転させます。エミュレータではCTRL+F11で画面回転します。
図3 画面回転後 |
これを回避するソースは以下。
図4 実行結果 |
public class MainActivity extends Activity implements OnClickListener{ private TextView textview1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textview1 = (TextView)findViewById(R.id.textView1); Button button1 = (Button)findViewById(R.id.button1); button1.setOnClickListener(this); } @Override protected void onSaveInstanceState(Bundle outState) {//Bundleに保存する super.onSaveInstanceState(outState); outState.putString("key", textview1.getText().toString() );//値を保存 } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { //Bundleより復帰する super.onRestoreInstanceState(savedInstanceState); String _text = savedInstanceState.getString("key");//値を取り出す textview1.setText("Bundle保存値:" + _text);//分かりやすいように保存値と追記します } @Override public void onClick(View arg0) { // TODO 自動生成されたメソッド・スタブ textview1.setText("こんにちわ世界!"); } }
res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="@string/hello_world" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="日本語化" /> </LinearLayout>
0 件のコメント:
コメントを投稿