TODAY : / TOTAL :

[121210] RadioButton을 이용하여 선택한 문장 출력 및 초기화 하기

  • Share this:
반응형




* Activity 는 다음과 같이 구성하고, 항목별로 라디오 버튼은 그룹으로 지정한다.
Ex) 남자 / 여자 둘중 한개만 선택 됨.

* 해당 라디오 버튼 선택 시 각 항목 옆에 표시 됨.
Ex) 남자 선택시 '성별' 항목 옆에  '성별 : 남자' 와 같은 형식으로 표시.

* 체크 해제 버튼을 누를시 모든 선택된 버튼이 Uncheck (무선택) 상태로 변경 됨.
(아래 화면 상태)




ㅁactivity_main.xml

GUI로 작성하여도 되나, 코드로 짜는 습관을. . . ( "더보기" 참고 )




ㅁ MainActivity.java

 package com.example.android1210;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  //btn.setOnClickListener 클래스(하위 클래스)에서 사용되므로 final을 붙여 상수화시켜준다.
  final RadioGroup rg01 = (RadioGroup)findViewById(R.id.rg01);
  final RadioGroup rg02 = (RadioGroup)findViewById(R.id.rg02);
 
  Button btn = (Button)findViewById(R.id.btn);
  
  // 해당 라디오 그룹에 속한 버튼들의 체크가 변경될때마다 호출되는 리스너 함수를 생성한다.
  rg01.setOnCheckedChangeListener(new OnCheckedChangeListener() {
   
   // "남자"(rb01) "여자"(rb02) 2개의 버튼을 가진 라디오 그룹 1(rg01)
   @Override
   public void onCheckedChanged(RadioGroup group, int checkedId) {
    
    RadioButton rb = (RadioButton)findViewById(checkedId);
    TextView tv01 = (TextView)findViewById(R.id.tv01);
    
    tv01.setText("성별");
    // "남자"를 선택했다면...
    if(checkedId==R.id.rb01)
    {
     tv01.setText(tv01.getText().toString() +" : " +  rb.getText().toString());
    }
    
    // "여자"를 선택했다면...
    else if(checkedId==R.id.rb02)
    {
     tv01.setText(tv01.getText().toString() +" : " +  rb.getText().toString());
    }
    
// clearCheck 를 통해서 버튼 선택이 모두 초기화되면서 체크속성이 변경되어 setOnCheckedChangeListener 를
// 다시 호출하게 된다.
// clearCheck 후에는 모두 선택되어 있지 않아 -1 값을 리턴하게 되며, -1의 주소값을 가진 id 는 존재하지 않기 때문에
// -1 리턴값에 대한 처리를 해주지 않으면, "작동이 중지되었습니다." 라는 메시지를 보게 될것이다. 

    else
    {
     tv01.setText(tv01.getText().toString());
    }
    
   }
  });
  
  
  rg02.setOnCheckedChangeListener(new OnCheckedChangeListener() {
   
   // "수신동의" (rb11) "수신거부"(rb12) 를 가진 라디오 그룹(rg02)
   @Override
   public void onCheckedChanged(RadioGroup group, int checkedId) {
    
    RadioButton rb = (RadioButton)findViewById(checkedId);
    TextView tv02 = (TextView)findViewById(R.id.tv02);
    
    tv02.setText("메일수신여부 ");
    
    // "수신동의" 를 눌렀다면...
    if(checkedId==R.id.rb11)
    {
     tv02.setText(tv02.getText().toString() + " : " + rb.getText().toString());
    }
    
    // "수신 거부" 를 눌렀다면...
    else if(checkedId==R.id.rb12)
    {
     tv02.setText(tv02.getText().toString() + " : " +  rb.getText().toString());
    }

   // rg01에서의 처리와 동일.
    else
    {
     tv02.setText(tv02.getText().toString());
    }
    
  
   }
  });
  
  
  btn.setOnClickListener(new OnClickListener() {
   
   @Override
   public void onClick(View v) {
    
    // 라디오 그룹내 체크표시를 모두 초기화 시킴. (체크가 되지 않은 상태로 바꿈)
    rg01.clearCheck();
    rg02.clearCheck();
    
   }
  });
  
  
  
  
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }

}


반응형

SEARCH

태그로 찾아보기