DaxHR
DaxHR

Reputation: 683

RadioButton switching between layouts

So I would like to have a calculator in my app. User will first click on RadioButton which would be for Imperial and Metric units, and depending on which one does user click, one of the layouts would appear.

As you know imperial units has feets and inches, for which I need two EditTexts, but metric unit needs only one.

So that's what I want, switching between layouts in same activity to avoid using fragments.

Any ideas?

EDIT

xml file

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="10dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:paddingTop="10dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        tools:context="hr.app.liftme.liftmehr.KalkulatoriBFMan"
        tools:showIn="@layout/activity_kalkulatori_bfman"
        android:orientation="vertical">


        <android.support.v7.widget.CardView
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="false"
            android:id="@+id/Osnove5"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            card_view:cardCornerRadius="2dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_weight="1"
            android:elevation="50dp"
            card_view:cardBackgroundColor="#ffffff"
            android:layout_marginBottom="10dp">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:id="@+id/linearLayout28"
                android:layout_marginBottom="20dp"
                android:layout_marginTop="55dp"
                android:padding="7dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/bf_uvodno"
                    android:id="@+id/textView140"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/bf_tekst_upute"
                    android:id="@+id/textView141"
                    android:textColor="#424242" />

            </LinearLayout>
        </android.support.v7.widget.CardView>


        <android.support.v7.widget.CardView
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="false"
            android:id="@+id/Drugo"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            card_view:cardCornerRadius="2dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_weight="1"
            android:layout_marginBottom="10dp"
            android:elevation="50dp"
            card_view:cardBackgroundColor="#ffffff">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/linearLayout27"
                android:layout_below="@+id/linearLayout28"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:padding="7dp">

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceLarge"
                        android:text="@string/bf_radio_naslov"
                        android:id="@+id/textView3"
                        android:textStyle="bold" />
                </LinearLayout>

                <LinearLayout
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <RadioGroup
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">

                        <RadioButton
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:id="@+id/radioButtonBFZeneCmKg"
                            android:text="@string/bf_radio2"

                            android:onClick="radioZeneCmKgClicked"
                            android:checked="false" />

                        <RadioButton
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:id="@+id/radioButtonBFZeneFtLb"
                            android:text="@string/bf_radio1"
                            android:onClick="radioZeneBFFtLbClicked"
                            android:checked="false" />

                    </RadioGroup>
                </LinearLayout>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/bf_edit_tezina"
                    android:id="@+id/textView133"
                    android:textStyle="bold" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal"
                    android:ems="10"
                    android:id="@+id/editTezinaBF"
                    android:hint="@string/bf_edit_tezina_hint_z"
                    android:layout_marginBottom="5dp" />

                <LinearLayout
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/LayoutVisinaMetric">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceLarge"
                        android:text="@string/bf_edit_visina"
                        android:id="@+id/textViewVisinaMetric"
                        android:textStyle="bold" />

                    <EditText
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:inputType="numberDecimal"
                        android:ems="10"
                        android:id="@+id/editVisinaBF"
                        android:hint="@string/bf_edit_visina_hint_z"
                        android:layout_marginBottom="5dp" />
                </LinearLayout>

                <LinearLayout
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/LayoutVisinaImperial">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceLarge"
                        android:text="@string/bf_feetinch_naslov"
                        android:id="@+id/textViewVisinaImperial"
                        android:textStyle="bold" />

                    <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent">

                        <EditText
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:inputType="numberDecimal"
                            android:ems="10"
                            android:id="@+id/editTextVisinaFT"
                            android:layout_weight="1"
                            android:hint="@string/bf_radio1_hint1" />

                        <EditText
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:inputType="numberDecimal"
                            android:ems="10"
                            android:id="@+id/editTextVisinaINC"
                            android:layout_weight="1"
                            android:hint="@string/bf_radio1_hint2" />
                    </LinearLayout>
                </LinearLayout>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/bf_edit_struk"
                    android:id="@+id/textView135"
                    android:textStyle="bold" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal"
                    android:ems="10"
                    android:id="@+id/editStrukBF"
                    android:hint="@string/bf_edit_struk_hint_z"
                    android:layout_marginBottom="5dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/bf_edit_bokovi"
                    android:id="@+id/textView136"
                    android:textStyle="bold" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal"
                    android:ems="10"
                    android:id="@+id/editBokoviBF"
                    android:hint="@string/bf_edit_bokovi_hint_z"
                    android:layout_marginBottom="5dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/bf_edit_vrat"
                    android:id="@+id/textView137"
                    android:textStyle="bold" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal"
                    android:ems="10"
                    android:id="@+id/editVratBF"
                    android:hint="@string/bf_edit_vrat_hint_z"
                    android:layout_marginBottom="5dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/bf_edit_godine"
                    android:id="@+id/textView138"
                    android:textStyle="bold" />

                <EditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:inputType="numberDecimal"
                    android:ems="10"
                    android:id="@+id/editGodineBF"
                    android:hint="@string/bf_edit_godine_hint_z"
                    android:layout_marginBottom="15dp" />

                <LinearLayout
                    android:orientation="vertical"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_below="@+id/linearLayout27"
                    android:layout_marginBottom="20dp"
                    android:id="@+id/linearLayout29">

                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/bf_btn_izracunaj"
                        android:id="@+id/btnIzracunajBF"
                        android:layout_gravity="center_horizontal"
                        android:background="#424242"
                        android:textColor="#ffffff"
                        android:layout_marginBottom="10dp" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAppearance="?android:attr/textAppearanceLarge"
                        android:text="@string/bf_tekst_rezultat"
                        android:id="@+id/textView139"
                        android:layout_gravity="center_horizontal" />

                    <LinearLayout
                        android:orientation="horizontal"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:gravity="center_horizontal">

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:id="@+id/textRezultatBF"
                            android:layout_gravity="center_horizontal" />

                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:textAppearance="?android:attr/textAppearanceMedium"
                            android:text="@string/bf_rezultat"
                            android:id="@+id/textView152" />
                    </LinearLayout>
                </LinearLayout>

            </LinearLayout>
        </android.support.v7.widget.CardView>

        <android.support.v7.widget.CardView
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="false"
            android:id="@+id/Osnove3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            card_view:cardCornerRadius="2dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_weight="1"
            android:elevation="50dp"
            card_view:cardBackgroundColor="#ffffff">

            <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:layout_below="@+id/linearLayout27"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:padding="7dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:text="@string/bf_tekst_tumacenje"
                    android:id="@+id/textView142"
                    android:gravity="center_horizontal"
                    android:layout_marginBottom="5dp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="@string/bf_tumacenje_rezultat_z"
                    android:id="@+id/textView143"
                    android:gravity="center_horizontal"
                    android:textColor="#424242" />
            </LinearLayout>
        </android.support.v7.widget.CardView>
    </LinearLayout>
</ScrollView>

java

public class KalkulatoriBFMan extends AppCompatActivity {

    EditText editTezina, editVisina, editStruk, editBokovi, editVrat, editGodine, editVisinaFT, editVisinaINC;
    Button btnIzracunajBF;
    TextView textRezultatBF, textVisinaMetric, textVisinaImperial;
    LinearLayout imperial, metric;

    public void radioZeneCmKgClicked(View view){
        boolean checked = ((RadioButton) view).isChecked();
        switch (view.getId()){
            case R.id.radioButtonBFZeneCmKg:
                if (checked)
                    editVisina.setVisibility(View.VISIBLE);
                imperial.setVisibility(View.GONE);
                btnIzracunajBF.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View v){
                        // IMPERIAL FORMULA
                        //Body Fat (women) = 495 / (1.29579 - .35004 * log10(Waist + Hip - Neck) + 0.22100 * log10(Height)) - 450
                        double prvoPolje = Double.parseDouble(editTezina.getText().toString());
                        double drugoPolje = Double.parseDouble(editVisina.getText().toString());
                        double trecePolje = Double.parseDouble(editStruk.getText().toString());
                        double cetvrtoPolje = Double.parseDouble(editBokovi.getText().toString());
                        double petoPolje = Double.parseDouble(editVrat.getText().toString());
                        double sestoPolje = Double.parseDouble(editGodine.getText().toString());

                        double rezultat = 0;

                        rezultat = 495 / (1.0324 - 0.19077 * Math.log10(trecePolje - petoPolje) + 0.15456 * Math.log10(drugoPolje)) - 450;
                        rezultat = Math.round(rezultat * 100.0) / 100.0;
                        textRezultatBF.setText(Double.toString(rezultat) + " %");
                    }
                });
                break;
        }
    }
    public void radioZeneBFFtLbClicked(View view) {
        boolean checked = ((RadioButton) view).isChecked();
        switch (view.getId()) {
            case R.id.radioButtonBFZeneFtLb:
                if (checked)
                    editVisinaFT.setVisibility(View.VISIBLE);
                metric.setVisibility(View.GONE);

                btnIzracunajBF.setOnClickListener(new View.OnClickListener(){
                    @Override
                    public void onClick(View v){
                        // IMPERIAL FORMULA
                        //Body Fat (men) = 495 / (1.29579 - .35004 * log10(Waist - Neck) + 0.22100 * log10(Height)) - 450
                        double prvoPolje = Double.parseDouble(editTezina.getText().toString());
                        double drugoPolje = Double.parseDouble(editVisinaFT.getText().toString());
                        double trecePolje = Double.parseDouble(editStruk.getText().toString());
                        double cetvrtoPolje = Double.parseDouble(editBokovi.getText().toString());
                        double petoPolje = Double.parseDouble(editVrat.getText().toString());
                        double sestoPolje = Double.parseDouble(editGodine.getText().toString());
                        double sedmoPolje = Double.parseDouble(editVisinaINC.getText().toString());
                        double rezultat = 0;

                        rezultat = 495 / (1.29579 - 0.35004 * Math.log10(trecePolje - petoPolje) + 0.22100 * Math.log10(((drugoPolje * 12) + sedmoPolje))) - 450;
                        rezultat = Math.round(rezultat * 100.0) / 100.0;
                        textRezultatBF.setText(Double.toString(rezultat) + " %");
                    }
                });
                break;
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_kalkulatori_bfwoman);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        Intent intent = getIntent();

        editTezina = (EditText) findViewById(R.id.editTezinaBF);
        editVisina = (EditText) findViewById(R.id.editVisinaBF);
        editStruk = (EditText) findViewById(R.id.editStrukBF);
        editBokovi = (EditText) findViewById(R.id.editBokoviBF);
        editVrat = (EditText) findViewById(R.id.editVratBF);
        editGodine = (EditText) findViewById(R.id.editGodineBF);
        editVisinaFT = (EditText) findViewById(R.id.editTextVisinaFT);
        editVisinaINC = (EditText) findViewById(R.id.editTextVisinaINC);
        textVisinaImperial = (TextView) findViewById(R.id.textViewVisinaImperial);
        textVisinaMetric = (TextView) findViewById(R.id.textViewVisinaMetric);
        imperial = (LinearLayout) findViewById(R.id.LayoutVisinaImperial);
        metric = (LinearLayout) findViewById(R.id.LayoutVisinaMetric);

        btnIzracunajBF = (Button) findViewById(R.id.btnIzracunajBF);

        textRezultatBF = (TextView) findViewById(R.id.textRezultatBF);





    }



}

Note that I solved blank space problem with setting visibility to GONE, but when I open activity both EditTexts appear, imperial and metric. I want them both to be invisible until user selects one RadioButton

Upvotes: 0

Views: 126

Answers (1)

Shubham
Shubham

Reputation: 3173

To define the click event handler for a button, add the android:onClick attribute to the <RadioButton> element in your XML layout. The value for this attribute must be the name of the method you want to call in response to a click event. The Activity hosting the layout must then implement the corresponding method.

For example, here are a couple RadioButton objects:

<?xml version="1.0" encoding="utf-8"?>
<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/radio_pirates"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/pirates"
        android:onClick="onRadioButtonClicked"/>
    <RadioButton android:id="@+id/radio_ninjas"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/ninjas"
        android:onClick="onRadioButtonClicked"/>
</RadioGroup>

Within the Activity that hosts this layout, the following method handles the click event for both radio buttons:

public void onRadioButtonClicked(View view) {
    // Is the button now checked?
    boolean checked = ((RadioButton) view).isChecked();

    // Check which radio button was clicked
    switch(view.getId()) {
        case R.id.imperial:
            if (checked)
                EditBox1.setVisibility(Visible)
            break;
        case R.id.metrics:
            if (checked){
                EditBox1.setVisibility(Visible)
                EditBox2.setVisibility(Visible) 
            }
            break;
    }
}

Source: http://developer.android.com/guide/topics/ui/controls/radiobutton.html

Upvotes: 2

Related Questions