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());
반응형
'코딩일기 > android studio' 카테고리의 다른 글
Android 독학 9일차 : View 생명주기(View를 그리는 과정) (0) | 2021.03.16 |
---|---|
Android 독학 8일차 : RatingBar 이벤트 처리 (0) | 2021.03.12 |
Android 독학 6일차 : CheckBox 이벤트 처리 (0) | 2021.03.11 |
안드로이드 독학 5일차 : EditText 이벤트 처리 (0) | 2021.03.10 |
안드로이드 독학 5일차 : 이벤트 리스너(event listener) (0) | 2021.03.09 |