본문 바로가기
코딩일기/android studio

Android 독학 7일차 : Radio Button 이벤트 처리 하기

by 욱파이어니어 2021. 3. 11.
728x90
반응형

라디오 버튼의 이벤트 처리 방법에 대해서 알아보자.

 

라디오 버튼은 체크박스와는 다르게 라디오 버튼 하나하나 뷰를 가져오지 않아도 된다.

왜냐하면 라디오 버튼은 어차피 하나만 선택할 수 있는 것이기 때문에 라디오 그룹에서 선택된 라디오 버튼을 가져오기만 하면 된다.

 

예제를 통해서 한번 보자.

 

일단 xml부터 보겠다.

xml 소스는 체크박스 이벤트 처리와 달라진게 "나의 취미는 : "을 담는 TextView를 따로 만들어서 

결과 창에는 선택된 취미만 받을수 있게 했다.

 

<?xml version="1.0" encoding="utf-8"?>
<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="wrap_content"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="좋아하는 취미 생활을 하나 선택하세요"
        android:layout_gravity="center"/>

    <TableLayout
        android:id="@+id/hobbies"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center">

        <TableRow>
            <RadioGroup
                android:orientation="horizontal"
                android:id="@+id/radioGroup">
               <RadioButton
                   android:id="@+id/workOut"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="헬스"
                    android:layout_marginRight="10dp"/>
                <RadioButton
                    android:id="@+id/movie"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="영화 감상"
                    android:layout_marginRight="10dp"/>
                <RadioButton
                    android:id="@+id/music"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="음악감상"/>
            </RadioGroup>
        </TableRow>
    </TableLayout>
    <Button
        android:id="@+id/submit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="제출"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/hobbyIntro"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="나의 취미 : "/>

        <TextView
            android:id="@+id/showHobby"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"/>
    </LinearLayout>
</LinearLayout>

 

그럼 이제 자바 소스를 보겠다.

 

package wook.co.kr;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity{

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

        //라디오 그룹
        final RadioGroup rg = (RadioGroup)findViewById(R.id.radioGroup);
        //제출 버튼
        Button submit = (Button)findViewById(R.id.submit);
        //라디오 버튼 결과값 받을라고
        final TextView showHobbies = (TextView)findViewById(R.id.showHobby);

        //제출 버튼 클릭했을때
        submit.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(),"제출했당~",Toast.LENGTH_SHORT).show();
                //라디오 버튼은 라디오 그룹으로 체크된 라디오 버튼 값을 가져올수 있다.
                int checkedRadio = rg.getCheckedRadioButtonId();
                //받은 id 값으로 해당 뷰 불러온다
                RadioButton rb = (RadioButton)findViewById(checkedRadio);
                showHobbies.setText(rb.getText().toString());
            }
        });
    }
}

자바 소스를 보면 라디오 그룹을 뷰 id로 가져왔다.

 

그리고 제출 버튼이 클릭됐을때 라디오 그룹에서 

rg.getCheckedRadioButtonId();라는 함수로 체크된 라디오 버튼의 id를 가져왔다.

 

뷰의 id를 담는곳이 보면은 int에 담는 것을 볼 수가 있는데 이렇게 하는 이유는

뷰의 id가 R.id.아이디 이렇게 되어 있어도 사실은 이 모두가 정수 형태로 되어 있기 때문이다.

 

그래서 체크된 라디오 버튼의 뷰를 가져와서 

취미를 출력하는 TextView에 체크된  rb의 값으로 setText() 시킨다.

showHobbies.setText(rb.getText(). toString());

반응형