Android/Summary

Intent를 이용하여, 값을 주고받자.

gandus 2010. 7. 8. 13:29

Main.java



package com.gandus.Intent;

 

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

 

public class main extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

       

        final Button input_BT = (Button)findViewById(R.id.inputBT);

        input_BT.setOnClickListener(new Button.OnClickListener(){

 

                                @Override

                                public void onClick(View v) {

                                          // TODO Auto-generated method stub

                                          Intent intent = new Intent(main.this, sub.class);

                                          startActivityForResult(intent, 1);

                                          // 호출당하는 액티비티로부터 데이터를 넘겨받기 위해 사용합니다.

                                          //intent - 인텐트

                                          //requestCode - 이 액티비티를 호출하는 액티비티가 여러 개가 있을 경우, 어떤 액티비티가 호출했는지를 알기 위해 사용

                                }

       

        });

    }

    @Override

    /*여기까지 정상적으로 돌아간 후, 호출당한 액티비티(InformationProc) finish()메소드에 의해 종료

     * 되게 되면, OnActivityResult() 메소드가 호출되게 됩니다.

     * 결과를 기다리고 액티비티를 호출했으니, 액티0비티가 종료되었으니 그 결과를 확인해야겠죠??

    */

    protected void onActivityResult(int requestCode, int resultCode, Intent data){

          //startActivityForResult로 호출한 액티비티가 종료되었을 때 호출됩니다.

          super.onActivityResult(requestCode, resultCode, data);

          TextView name_view = (TextView)findViewById(R.id.main_name_input);

          TextView num_view = (TextView)findViewById(R.id.main_num_input);

         

          if(resultCode == RESULT_OK)

          //requestCode가 아까 setResult()에서 액티비티가 정상 종료되었는지를 판단하는 인자값,

          //RESULT_OK를 받게 됩니다. 그래서, 이걸 가지고 적절히 예외 처리를 해 줄 수 있는 거죠.

          {

                    if(requestCode ==1 )

                    {

                    /*requestCode는 아까 startActivityForResult()를 호출할 때, InformationInput

                     * 호출한 것임을 표시하기 위해 '1'으로 설정하였으므로, 여기에서 또한 그 코드를 맞춰주어야

                     * 제데로 결과값을 받을 수 있습니다.

                     * , 정상적으로 액티비티가 종료되었다면 requestCode의 값은 RESULT_OK, resultCode 1이 됩니다.

                     * */

                               name_view.setText(data.getStringExtra("data_name"));

                               num_view.setText(data.getStringExtra("data_num"));

                                                             

                    }

          }

    }

}

          

          


Sub.java


package com.gandus.Intent;

 

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

 

public class sub extends Activity {

 

           /** Called when the activity is first created. */

           @Override

           public void onCreate(Bundle savedInstanceState) {

               super.onCreate(savedInstanceState);

               setContentView(R.layout.sub_main);

               // TODO Auto-generated method stub

              

               Button commit = (Button)findViewById(R.id.Commit);

               commit.setOnClickListener(new Button.OnClickListener(){

                     @Override

                     public void onClick(View v){

                               Intent intent = getIntent();   // 이 액티비티를 시작하게한 인텐트 호출

                               EditText name_input = (EditText)findViewById(R.id.sub_edit_name);

                               EditText num_input = (EditText)findViewById(R.id.sub_edit_num);

                              

                               intent.putExtra("data_name", name_input.getText().toString());

                               // putExtra(String name, _value) -> name에 해당하는 곳에 값을 가져온다.

                               intent.putExtra("data_num", num_input.getText().toString());

                               setResult(RESULT_OK, intent);  // 추가 정보를 넣은 후 다시 인테트를 반환

                               /*RESULT_OK로 액티비티가 정상적으로 끝났음을 전달하게 됩니다.

                                * RESULT_OK를 반환하지 않고 중간에 비정상적으로 종료되었다면

                                *  저 코드를 반환받지 못하므로 뭔가 문제가 있구나 알게 되겠죠? 제데로 종료가 된다면,

                                *  아까 우리가 추가로 입력한 데이터를 담은 인텐트도 함께 반환하게 됩니다

                                */

                               finish();  // 액티비티 종료

                     }

 

               });

           }

 

}