안드로이드 체크박스를 이용하여 액티비티간 값 전달하기


필요한 코드만 적어서 이대로 실행하면 에러가 나므로 알맞게 수정이 필요함


check.xml 에 체크박스 선언



<CheckBox
    android:id="@+id/option1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15sp" />

<CheckBox
    android:id="@+id/option2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15sp" />



CheckActivity.java 에서 체크했을 때 동작 코드 추가


public class CheckActivity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// 액티비티 생성 setContentView(R.layout.check);// check.xml //버튼 선언 Button button=(Button)findViewById(R.id.button_result); button.setOnClickListener(this); // option1 체크박스가 눌렸을 때 findViewById(R.id.option1).setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Checked(v); // 체크되었을 때 동작코드 } }); // option2 체크박스가 눌렸을 때 findViewById(R.id.option2).setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { Checked(v); // 체크되었을 때 동작코드 } }); } public String Checked(View v) { // 체크되었을 때 동작할 메소드 구현 // TODO Auto-generated method stub CheckBox option1 = (CheckBox) findViewById(R.id.option1); // option1체크박스 // 선언 CheckBox option2 = (CheckBox) findViewById(R.id.option2); // option1체크박스 // 선언 String resultText = ""; // 체크되었을 때 값을 저장할 스트링 값 if (option1.isChecked()) { // option1 이 체크되었다면 resultText = "option1"; } if (option2.isChecked()) { resultText = "option2"; // option2 이 체크되었다면 } return resultText; // 체크된 값 리턴 } @Override public void onClick(View v) { if (v.getId() == R.id.button_result) { //button_result 이라는 버튼이 생성되었다고 가정. Intent it = new Intent(this, MainActivity.class); // MainActivity.java로 보내기 위한 인텐트 선언 it.putExtra("it_check", Checked(v)); // it_check 라는 이름하에 체크된 값을 전달 startActivity(it); // MainActivity.java를 실행하면서 값을 전달 } } }



MainActivity.java에서 값 전달 받기



public class MainActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//액티비티 생성 setContentView(R.layout.main);//main.xml Intent it=getIntent(); //인텐트 받기 선언 //이전에 보냈던 it_check의 값을 받아 str에 저장 String str= it.getStringExtra("it_check"); //즉 str = "option1" 또는 "option2" 가 들어있음 //이 값을 이용하여 필요한 동작 구현 if(str.equals("option1"){ //str 값이 option1 이라면 //필요한 동작 코드 작성 }else if(str.equals("option2"){ //str 값이 option2 라면 //필요한 동작 코드 작성 } } }


동작 순서는 check.xml -> CheckActivity.java -> MainActivity.java 이렇게 된다






  1. juni 2015.06.08 18:10 신고

    안녕하세요 글 잘 봤습니다. 질문드릴게 있는데요 체크를 하고 전달할때 어떤 버튼으로 전달을 할 수 있게 구현시켯나요 예를들어 홈쇼핑을 예를들면
    옷을 선택후에 장바구니 버튼을 클릭하면 장바구니에 옮겨지는 것처럼 장바구니버튼이 어떤부분인지 궁금합니다

    • todriver08 2015.06.08 18:33 신고

      아 지금 코드를 보니 버튼 부분이 빠졌네요

      Intent it = new Intent(this, MainActivity.class); //MainActivity.java로 보내기 위한 인텐트 선언
      it.putExtra("it_check", Checked(v)); //it_check 라는 이름하에 체크된 값을 전달

      startActivity(it); //MainActivity.java를 실행하면서 값을 전달

      이부분이 전달하는 부분인데

      OnClick에 위 코드가 들어가있으면 됩니다.

      본문
      CheckActivity.java 에서 체크했을 때 동작 코드 추가 코드를 수정했으니 참고 부탁드려요

      R.id.button_result 이 버튼은 따로 생성해주셔야 해요

    • juni 2015.06.08 18:58 신고

      하나만 더 질문 드릴게요ㅜㅜ

      체크액티비티에서 체크를 한 값을 메인액티비티로 옮기는 과정 까지 나온거같은데 메인 액티비티에서 xml을 어떤식으로 짜야 그 텍스트가 옮겨지는 자리를 만들어줄수 있을까요
      쇼핑몰을 또 예를들게요
      쇼핑몰에서 옷을 고른뒤(체크행위) 장바구니버튼을 클릭(button_result)후에 메인액티비티로 넘어왓어요 그럼 그 넘어온 값을 어떻게 표시할 수 있는지에 대해 여쭤보고싶네요

      이거때문인지 모르겟는데 자꾸 앱을 실행시키면 앱이 중지되었습니다 라는 메세지가 나오네요ㅜㅜ

    • todriver08 2015.06.08 19:00 신고

      그 값을 표시해 주실 것인지 그 값을 이용해서 확인을 할 것인지 방식은 다양한데

      표시하는 걸 예로 들어볼게요

      값 전달 받기 코드에 보시면
      String str= it.getStringExtra("it_check"); //즉 str = "option1" 또는 "option2" 가 들어있음

      //이 값을 이용하여 필요한 동작 구현
      if(str.equals("option1"){ //str 값이 option1 이라면
      //필요한 동작 코드 작성
      }else if(str.equals("option2"){ //str 값이 option2 라면
      //필요한 동작 코드 작성
      }

      이 부분이 있는데
      str 여기에 값이 저장되어 있다고 보시면 됩니다.
      만약 그 값을 표시하고 싶으시면

      str 값을 TextView 에다가 셋팅해주시면 됩니다.
      String str= it.getStringExtra("it_check")
      TextView txt=(TextView)findViewById(R.id.txt_view);
      txt.setText(str);

      이런 식으로 해주면 txt_view 라는 id를 가진 TextView 에 str의 값이 표시됩니다.


      로그캣에 에러가 있을거에요 거기세 어디 코드 몇번째 줄에 에러가났는지 나올테니 그 부분을 한번 살펴보세요

    • juni 2015.06.08 19:16 신고

      정말정말 죄송합니다 너무 급한 상황이여서 도움을 요청합니다ㅜㅜ

      메인xml 레이아웃을 어떻게 구성시켜야할지 모르겠습니다ㅜㅜ

      <TextView
      android:id="@+id/textview1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="center" />
      저는 아이디 값을 textview1로 정햇구요 저런식으로 텍스트뷰 설정해놓으면 되는건가요?

    • todriver08 2015.06.08 19:18 신고

      아 제가 지금 밖이라 일단은 xml은 저렇게 하시면됩니다.

      안되시면 댓글달아주세요

    • juni 2015.06.08 19:24 신고

      06-08 19:18:30.422: E/dalvikvm(9689): dvmPauseGc(AppLaunch) called - cookie=0x2ffc (f=0x1)
      06-08 19:18:30.427: I/PersonaManager(9689): getPersonaService() name persona_policy
      06-08 19:18:30.472: I/PersonaManager(9689): getPersonaService() name persona_policy
      06-08 19:18:30.517: E/MoreInfoHPW_ViewGroup(9689): Parent view is not a TextView
      06-08 19:18:30.537: I/PersonaManager(9689): getPersonaService() name persona_policy
      06-08 19:18:30.577: D/AndroidRuntime(9689): Shutting down VM
      06-08 19:18:30.577: W/dalvikvm(9689): threadid=1: thread exiting with uncaught exception (group=0x41734c08)
      06-08 19:18:30.582: E/AndroidRuntime(9689): FATAL EXCEPTION: main
      06-08 19:18:30.582: E/AndroidRuntime(9689): Process: com.example.dididiary2, PID: 9689
      06-08 19:18:30.582: E/AndroidRuntime(9689): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.dididiary2/com.example.dididiary2.MainActivity}: java.lang.NullPointerException
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2328)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.ActivityThread.access$900(ActivityThread.java:169)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.os.Handler.dispatchMessage(Handler.java:102)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.os.Looper.loop(Looper.java:136)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.ActivityThread.main(ActivityThread.java:5476)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at java.lang.reflect.Method.invokeNative(Native Method)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at java.lang.reflect.Method.invoke(Method.java:515)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at dalvik.system.NativeStart.main(Native Method)
      06-08 19:18:30.582: E/AndroidRuntime(9689): Caused by: java.lang.NullPointerException
      06-08 19:18:30.582: E/AndroidRuntime(9689): at com.example.dididiary2.MainActivity.onCreate(MainActivity.java:26)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.Activity.performCreate(Activity.java:5473)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
      06-08 19:18:30.582: E/AndroidRuntime(9689): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
      06-08 19:18:30.582: E/AndroidRuntime(9689): ... 11 more

      로그가 이런식으로 뜨는데요 몇번째줄이란건 어디에 나오는거죠??ㅜㅜ

    • todriver08 2015.06.08 19:27 신고

      널포인트에러가 났는데 님이 만드신 액티비티 파일명과 똑같은 부분이 있나 확인해보세요. 혹시 instru~.java 이건가요. 밑에 더 있을거 같은데 확인해봐야될거같아요

    • juni 2015.06.08 19:36 신고

      액티비티 파일명이라함은 같은 프로젝트 안에 각각 액티비티 명 말씀하시는건가요?

    • todriver08 2015.06.08 19:45 신고


      ~~~.java 로 만들어진 파일들이요

      지금 보니까
      at com.example.dididiary2.MainActivity.onCreate(MainActivity.java:26)
      이부분인거 같은데요 MainActivity 파일 26번째 줄을 확인해보세요

    • juni 2015.06.08 20:39 신고

      문제가 뭔지 알앗어요

      제가 메인자바에 다른3개 액티비티 창으로 갈 수 있는 버튼 3개를 구현시켯거든요 그때 startactivityforresult를 썻어요 이거 때문에 중복이 되서 값을 못 옮겼나봐요
      문제는 알았는데 startactivityforresult는 또 어떻게 쓰는건지 하 막막하네요ㅜㅜ 내일이 마지막 제출날인데 하면할수록 문제가 더 생겨버리네요ㅜㅜ

    • todriver08 2015.06.08 20:53 신고

      startactivityforresult
      이게 다른 액티비티로 넘어가는 버튼인가요?

      중복이 되서 값을 못 옮긴다는게 어떤건지 파악이 좀 어렵네요.
      어떤 기능을 구현하시려는거죠

    • juni 2015.06.08 21:14 신고

      혹시 집에 언제도착하시죠? 메신져같은걸로 자세하게 말씀드리고싶네요

    • juni 2015.06.08 21:26 신고

      메일 보냇습니다 확인해주세요 프로젝트 통째로 압축해서 보냈습니다. 이클립스 사용중이구요 자세한건 메일에 번호 보내드렸습니다. 연락부탁드릴게요

    • todriver08 2015.06.08 22:39 신고

      도움이 되었으면 좋겠네요 마무리 잘하시고 파이팅 하세요!

  2. 깡돌 2016.01.07 09:56 신고

    안녕하세요 많은 도움이 되었습니다.

    질문이 있는데요 라디오 버튼도 이런식으로 하면 되나요?

    • todriver08 2016.01.07 09:58 신고

      조금 다를거에여 안드로이드 라디오버튼 구글검색하시면 잘 설명된 글 많이 나오실거에요

    • 깡돌 2016.01.07 09:59 신고

      댓글 감사합니다 ㅎㅎ 좋은하루 보내세요

  3. 동글동글 2016.11.26 06:49 신고

    안녕하세요 도움이 많이됬습니다.
    저두 필요한 동작 작성에 대해 묻고 싶어요 ㅠㅠ 연락 가능할까요??

  4. Andro 2018.05.16 08:17 신고

    만약 체크박스가 3개이고 그 3개 값 중 택 1이 아니라 중복가능하게 하는건 어떻게 해야할까요... ㅜ

+ Recent posts