I've got a problem with setting a background image programmatically. I cannot do it.
This is my theme class. There are radio buttons in the code that should change the main background. So far I've written implementation for two radio buttons (i.e. radioButtonMountains and radioButtonSea) that should load two different images (i.e. mountains.png and sea.png).
public class ThemeActivity extends BasicActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_theme);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle("Motywy");
setAction();
}
private void setAction(){
relativeLayout=(RelativeLayout) findViewById(R.id.relativeLayoutid);
radioGroup=(RadioGroup) findViewById(R.id.radioGroup);
radioButtonMountains=(RadioButton) findViewById(R.id.radioMountains);
radioButtonCity=(RadioButton) findViewById(R.id.radioCity);
radioButtonSea=(RadioButton) findViewById(R.id.radioSea);
radioButtonNature=(RadioButton) findViewById(R.id.radioNature);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(radioButtonMountains.isChecked()){
//relativeLayout.setBackgroundDrawable(getResources().getDrawable(R.drawable.mountains));
//relativeLayout.setBackground(getResources().getDrawable(R.drawable.mountains));
relativeLayout.setBackgroundResource(R.drawable.mountains);
}
else if(radioButtonCity.isChecked()){
}
else if(radioButtonSea.isChecked()){
relativeLayout.setBackgroundResource(R.drawable.sea);
}
else if(radioButtonNature.isChecked()){
}
}
});
}
This is my activity_main.xml for my main class (if you want i can paste the code with my main class). I've added 'android:id="@+id/relativeLayoutid"' which is referred to above.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayoutid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/sea"
android:orientation="vertical" >
// other things like a ImageButton, a TextView etc
</RelativeLayout>
Finally, when I click, one of the radio buttons is replaced by:
11-11 21:28:34.172: D/AndroidRuntime(22316): Shutting down VM
11-11 21:28:34.172: W/dalvikvm(22316): threadid=1: thread exiting with uncaught exception (group=0x411162a0)
11-11 21:28:34.202: E/AndroidRuntime(22316): FATAL EXCEPTION: main
11-11 21:28:34.202: E/AndroidRuntime(22316): java.lang.NullPointerException
11-11 21:28:34.202: E/AndroidRuntime(22316): at com.example.runapp.ThemeActivity$1.onCheckedChanged(ThemeActivity.java:43)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.widget.RadioGroup.setCheckedId(RadioGroup.java:174)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.widget.RadioGroup.access$600(RadioGroup.java:54)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:358)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.widget.CompoundButton.setChecked(CompoundButton.java:140)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.widget.CompoundButton.toggle(CompoundButton.java:92)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.widget.RadioButton.toggle(RadioButton.java:76)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.widget.CompoundButton.performClick(CompoundButton.java:104)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.view.View$PerformClick.run(View.java:17082)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.os.Handler.handleCallback(Handler.java:615)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.os.Handler.dispatchMessage(Handler.java:92)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.os.Looper.loop(Looper.java:137)
11-11 21:28:34.202: E/AndroidRuntime(22316): at android.app.ActivityThread.main(ActivityThread.java:4867)
11-11 21:28:34.202: E/AndroidRuntime(22316): at java.lang.reflect.Method.invokeNative(Native Method)
11-11 21:28:34.202: E/AndroidRuntime(22316): at java.lang.reflect.Method.invoke(Method.java:511)
11-11 21:28:34.202: E/AndroidRuntime(22316): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
11-11 21:28:34.202: E/AndroidRuntime(22316): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
11-11 21:28:34.202: E/AndroidRuntime(22316): at dalvik.system.NativeStart.main(Native Method)
and the application closed. I tried use this way:
relativeLayout.setBackgroundResource(R.drawable.mountains);
and this way:
relativeLayout.setBackground(getResources().getDrawable(R.drawable.mountains));
and this way:
relativeLayout.setBackgroundDrawable(getResources().getDrawable(R.drawable.mountains));
and none of them work.
How can i fix this issue? What should i correct?
MainActivity class:
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public class MainActivity extends BasicActivity implements OnClickListener {
public final static String EXTRA_MESSAGE = "com.example.helloworld.MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//other things
setContentView(R.layout.activity_main);
relativeLayout=(RelativeLayout) findViewById(R.id.relativeLayoutid);
if(image==0) relativeLayout.setBackgroundResource(R.drawable.mountains);
else relativeLayout.setBackgroundResource(image);
//other things
}
//other things
public RelativeLayout relativeLayout;
public static int image;
}
activity_main.xml for MainActivity class:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayoutid"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/sea"
android:orientation="vertical" >
// other things like a ImageButton, a TextView etc
</RelativeLayout>
ThemeActivity class where I change the main background:
public class ThemeActivity extends BasicActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_theme);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle("Theme");
setAction();
}
private void setAction(){
radioGroup=(RadioGroup) findViewById(R.id.radioGroup);
radioButtonMountains=(RadioButton) findViewById(R.id.radioMountains);
radioButtonCity=(RadioButton) findViewById(R.id.radioCity);
radioButtonSea=(RadioButton) findViewById(R.id.radioSea);
radioButtonNature=(RadioButton) findViewById(R.id.radioNature);
setRadioChoose();
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(radioButtonMountains.isChecked()){
MainActivity.image=R.drawable.mountains;
}
else if(radioButtonCity.isChecked()){
MainActivity.image=R.drawable.city;
}
else if(radioButtonSea.isChecked()){
MainActivity.image=R.drawable.sea;
}
else if(radioButtonNature.isChecked()){
MainActivity.image=R.drawable.nature;
}
saveRadioChoose(checkedId);
}
});
}
private void setRadioChoose(){
radioChoose=PreferenceManager.getDefaultSharedPreferences(getBaseContext());
radioChooseEdit=radioChoose.edit();
int radio=radioChoose.getInt("RADIO", 0);
if(radio==radioButtonMountains.getId()) radioButtonMountains.setChecked(true);
else if(radio==radioButtonCity.getId()) radioButtonCity.setChecked(true);
else if(radio==radioButtonSea.getId()) radioButtonSea.setChecked(true);
else if(radio==radioButtonNature.getId()) radioButtonNature.setChecked(true);
else if(radio==0) radioButtonMountains.setChecked(true);
}
private void saveRadioChoose(int checkedId){
radioChooseEdit.putInt("RADIO", checkedId);
radioChooseEdit.commit();
}
private RadioGroup radioGroup;
private RadioButton radioButtonMountains;
private RadioButton radioButtonCity;
private RadioButton radioButtonSea;
private RadioButton radioButtonNature;
private SharedPreferences radioChoose;
private SharedPreferences.Editor radioChooseEdit;
}
I used this code for a shopping cart//catalog app. The radiobuttons were used to hold the product color information, so a user selecting a color, represented by a radiobutton with a different color background, determined the product color of the image.
color[i] = new RadioButton(getActivity());
color[i].setButtonDrawable(R.drawable.color_radio_button);
if (sdkVersion < 16) {
color[i].setBackgroundDrawable(bkg);
} else {
color[i].setBackground(bkg);
}
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/color_radio_selected" android:state_focused="true"/>
<item android:drawable="@drawable/color_radio_selected" android:state_pressed="true"/>
<item android:drawable="@drawable/color_radio_selected" android:state_selected="true"/>
<item android:drawable="@drawable/color_radio_selected" android:state_checked="true"/>
<item android:drawable="@drawable/color_radio_unselected"/>
</selector>

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With