简体   繁体   中英

Android - Radiobutton click event to go to new activity

I would like to do something like a small selection form.

I would like to do a click event where if I select one of the first radiogroup and another one of the second it takes me to a new activity. I got two radiogroups with two radiobuttons inside each.

<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <RadioButton android:id="@+id/physic"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="physic"
            android:onClick="onRadioButtonClicked"/>
        <RadioButton android:id="@+id/math"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="math"
            android:onClick="onRadioButtonClicked"/>
</RadioGroup>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <RadioButton android:id="@+id/theories"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="theories"
            android:onClick="onRadioButtonClicked"/>
        <RadioButton android:id="@+id/problems_solving"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="problem solving"
            android:onClick="onRadioButtonClicked"/>
</RadioGroup>

I declared my buttons and tried to use onRadioButtonClicked like below:

public void onRadioButtonClicked(View view) {
        boolean checked = ((RadioButton) view).isChecked();

    switch(view.getId()) {
        case R.id.math:
            if (checked)
                switch(view.getId()) {
                    case R.id.problems_solving:
                        if (checked)
                            showFirstWord("math problem resolution");
                        break;
                    case R.id.theories:
                        if (checked)
                            showSecondWord("math theories");
                        break;
                }
            break;

        case R.id.physic:
            if (checked)
                switch(view.getId()) {
                    case R.id.problems_solving:
                        if (checked)
                            showThirdWord("physic problem solving");
                        break;
                    case R.id.theories:
                        if (checked)
                            showFourthWord("physic theories");
                        break;
                }
            break;
    }
}

I want the strings in the functions to appear in a text view in the other activities like below:

private void showFirstWord (String text) {
    Intent first_word = new Intent(this, FirstActivity.class);
    first_word.putExtra("key", text);
    startActivity(first_word);
}
private void showSecondWord (String text) {
    Intent second_word = new Intent(this, SecondActivity.class);
    second_word.putExtra("key", text);
    startActivity(second_word);
}
private void showThirdWord (String text) {
    Intent third_word = new Intent(this, ThirdActivity.class);
    third_word.putExtra("key", text);
    startActivity(third_word);
}
private void showFourthWord (String text) {
    Intent fourth_word = new Intent(this, FourthActivity.class);
    fourth_word.putExtra("key", text);
    startActivity(fourth_word);
}

I tried to follow this page from Android developers but I'm still not sure what to do with it: https://stuff.mit.edu/afs/sipb/project/android/docs/guide/topics/ui/controls/radiobutton.html

My method doesn't seem to be correct ass I can't get the strings to appear in the other activities. Is my reasonning ok for now or should I study another method?

Thanks :)

String str; // store the text corresponding to  the RadioButton which is clicked 

   switch(view.getId()) {
                case R.id.radioButton1:
                    if (checked)
                     str = "button1Text";
                    break;
                case R.id.radioButton2:
                    if (checked) 
                     str = "button2Text";
                    break;
                case R.id.radioButton3:
                    if (checked) 
                     str = "button3Text";
                    break;
         }

            Intent intent = new Intent(this, WinderDTActivity.class);
            intent.putExtra("radioChosen", str); // pass "str" to the next Activity

You can simplified your code onRadioButtonClicked just create first a String variable called subjectSelected .

then:

private String subjectSelected = "";
public void onRadioButtonClicked(View view) {
    RadioButton radioButton = (RadioButton) view;

    switch(view.getId()) {
        case R.id.math:
            subjectSelected = radioButton.getText().toString();
            break;
        case R.id.physic:
            subjectSelected = radioButton.getText().toString();
            break;
        case R.id.problems_solving:
            if (subjectSelected.equals("math")) {
                showFirstWord ("math problem resolution");
            } else if (subjectSelected.equals("physic")) {
                showThirdWord("physic problem solving");
            }
            break;
        case R.id.theories:
            if (subjectSelected.equals("math")) {
                showSecondWord("math theories");
            } else if (subjectSelected.equals("physic")) {
                showFourthWord("physic theories");
            }
            break;
    }
}

and to display the text you pass to another activity. Use a Bundle to get the value of your key .

eg:

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);

        Bundle bundle = getIntent().getExtras();
        String key = bundle.getString("key");

        TextView textView = (TextView) findViewById(R.id.textView1); // Replace the textView1 with the id you set to your textview.
        textView.setText(key);
    }
}

You can copy the codes of your FirstActivity and paste to your SecondActivity , ThirdActivity and FourthActivity to get the key.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM