Riley Bolen Riley Bolen - 13 days ago 5
Java Question

Getting the id of the selected radio button when a button is clicked

Here is what I am trying to do:
I have 2 activities, a MainActivity and a SettingsActivity that is opened on the click of a button in MA. In the SA there are 6 radio buttons each with a corresponding colour id (as seen in the if/else statement) in a radio group, and a button to close the activity. When the user presses the close button the background of the MA changes to the colour that is selected by the user. Everything works well, except for the fact that the getCheckedRadioButtonId() method gets the id of the button that is selected when the SettingsActivity is created, which is none, so the colour that shows is always the one in the final else block. I know this should be a really simple fix but I have spent about 4 hours trying every solution I can think of and none of my many google searches have gotten me anything useful.Here is the relevant code:

SettingsActivity.java:

public class SettingsActivity extends AppCompatActivity {

public static final String colorID = "colorID";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
LayoutInflater inflater = LayoutInflater.from(SettingsActivity.this);
View settingsView= inflater.inflate(R.layout.activity_settings, null);

returnToMain();
}

public int getColorValueID(View view) {

final int colorId;
int id;

final RadioGroup radioGroup = (RadioGroup) view.findViewById(R.id.radioGroup);

if(radioGroup.getCheckedRadioButtonId()!= -1) {
id = radioGroup.getCheckedRadioButtonId();
}
else {
id = 0;
}

if (id == R.id.redButton) {

colorId = R.color.red_theme;

} else if (id == R.id.blueButton) {

colorId = R.color.blue_theme;

} else if (id == R.id.greenButton) {

colorId = R.color.green_theme;

} else if (id == R.id.orangeButton) {

colorId = R.color.orange_theme;

} else if (id == R.id.purpleButton) {

colorId = R.color.purple_theme;

} else {

colorId = R.color.blue_theme;

}

return colorId;
}

public void returnToMain(){
Button returnButton = (Button) findViewById(R.id.backToMain);

returnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LayoutInflater inflater = LayoutInflater.from(SettingsActivity.this);
View settingsView= inflater.inflate(R.layout.activity_settings, null);

int color = getColorValueID(settingsView);
final Intent mIntent = new Intent();
mIntent.putExtra(colorID, color);
setResult(RESULT_OK, mIntent);
finish();
}
});
}
}


activity_settings.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_settings"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.rileybolen.simplemortgagecalculator.SettingsActivity"
tools:background="#dedede">

<TextView
android:text="@string/settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:id="@+id/settingsHeading"
android:textColor="#494949"
android:textSize="32sp"
android:textAlignment="center"
/>

<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/themeHeading"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:id="@+id/radioGroup">

<RadioButton
android:text="Orange"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/orangeButton"
android:layout_alignParentTop="true"
android:textColor="@color/orange_theme"
android:textSize="18sp"
android:layout_marginLeft="20dp"
/>

<RadioButton
android:text="Purple"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/purpleButton"
android:layout_below="@id/orangeButton"
android:textColor="@color/purple_theme"
android:textSize="18sp"
android:layout_marginLeft="20dp"/>

<RadioButton
android:text="Grey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/greyButton"
android:layout_below="@id/purpleButton"
android:textColor="#494949"
android:textSize="18sp"
android:layout_marginLeft="20dp"/>


<RadioButton
android:text="Red"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/redButton"
android:layout_alignParentTop="true"
android:textColor="@color/red_theme"
android:textSize="18sp"
android:layout_marginLeft="20dp"/>

<RadioButton
android:text="Blue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/blueButton"
android:layout_below="@id/redButton"
android:textColor="@color/blue_theme"
android:textSize="18sp"
android:layout_marginLeft="20dp"/>

<RadioButton
android:text="Green"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/greenButton"
android:layout_below="@id/blueButton"
android:textColor="@color/green_theme"
android:textSize="18sp"
android:layout_marginLeft="20dp"/>


</RadioGroup>

<TextView
android:text="@string/theme_heading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="28dp"
android:id="@+id/themeHeading"
android:textColor="#494949"
android:textSize="24sp"
android:layout_below="@+id/settingsHeading"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"/>



<Button
android:text="Close"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/backToMain"
android:layout_alignParentBottom="true"
/>


</RelativeLayout>

Answer

Register an onCheckedChanged(RadioGroup group, int checkedId) listener on your RadioGroup

radioGroup.setOnCheckedChangedListener(new OnCheckChangedListener(){
public void onCheckedChanged(RadioGroup group, int checkedId) {

}

});

Something like that..