[android-developers] Switching views with RadioButton and saving views in Bundle
I have the following XML code: ?xml version=1.0 encoding=utf-8? RelativeLayout xmlns:android=http://schemas.android.com/apk/res/ android android:layout_width=fill_parent android:layout_height=fill_parent RadioGroup android:orientation=horizontal android:layout_width=wrap_content android:layout_height=wrap_content android:layout_alignParentBottom=true RadioButton android:id=@+id/_2D android:layout_width=wrap_content android:layout_height=wrap_content android:text=2D/ RadioButton android:id=@+id/_3D android:layout_width=wrap_content android:layout_height=wrap_content android:text=3D/ /RadioGroup /RelativeLayout And I have the following Java code: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (savedInstanceState == null) { RadioGroup.OnCheckedChangeListener buttonListener = new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if (checkedId == R.id._2D) { main.removeView(findViewById(R.id._3D)); main.addView(_2D); } else if (checkedId == R.id._3D) { main.removeView(findViewById(R.id._2D)); main.addView(_3D); } } }; RadioGroup dimensions = (RadioGroup) findViewById(R.id.dimensions); dimensions.setOnCheckedChangeListener(buttonListener); } _2D = new _2DView(this); _3D = new _3DView(this); main = (RelativeLayout) findViewById(R.id.window); RadioGroup dimensions = (RadioGroup) findViewById(R.id.dimensions); if (dimensions.getCheckedRadioButtonId() == R.id._2D) { main.addView(_2D); } else if (dimensions.getCheckedRadioButtonId() == R.id._3D) { main.addView(_3D); } } The idea is to change the views, whenever I press one of the radio buttons. When I press a button the first time everything works out fine, but the second time I press a button, I get an IllegalStateException, and I can't quite see why I'm getting this. Also, the Activity seems to set all my global variables to null, which is why I have to create them every time I switch from portrait to landscape or vice versa. So I would like to know if there is a way I can save my views in the Bundle, or any other way in which I can permanently save my views, so I don't have to add or create them every time, I flip the phone. And whenever I flip the phone, it seems that it rereads the main XML file, causing the RadioGroup to be set to 2D even if the 3D button is checked. This is because I've said the 2D button to be checked from when the app is first created, but I would like to also save the state of that RadioGroup. -- You received this message because you are subscribed to the Google Groups Android Developers group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en
Re: [android-developers] Switching views with RadioButton and saving views in Bundle
ThemePark wrote: The idea is to change the views, whenever I press one of the radio buttons. When I press a button the first time everything works out fine, but the second time I press a button, I get an IllegalStateException, and I can't quite see why I'm getting this. The full Java stack trace, from adb logcat, DDMS, or the DDMS perspective in Eclipse, may give you more clues. Also, the Activity seems to set all my global variables to null, which is why I have to create them every time I switch from portrait to landscape or vice versa. Java does not have global variables. So I would like to know if there is a way I can save my views in the Bundle, or any other way in which I can permanently save my views, so I don't have to add or create them every time, I flip the phone. No. Doing so would cause crashes at best and memory leaks at worst. If you do not want your activity destroyed when the orientation changes, you can set up a manifest entry for that: http://www.androidguys.com/2008/11/11/rotational-forces-part-three/ And whenever I flip the phone, it seems that it rereads the main XML file, causing the RadioGroup to be set to 2D even if the 3D button is checked. Correct. Your activity is being destroyed and recreated. This is because I've said the 2D button to be checked from when the app is first created, but I would like to also save the state of that RadioGroup. Assuming you do not go down the path I pointed you to above, you can save the state of your RadioButton in onSaveInstanceState() and re-apply it in either onCreate() or onRestoreInstanceState(). -- Mark Murphy (a Commons Guy) http://commonsware.com | http://twitter.com/commonsguy Android 2.0 Programming Books: http://commonsware.com/books -- You received this message because you are subscribed to the Google Groups Android Developers group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en