개발/android

[Android] 안드로이드 Intent, startActivity, startActivityForResult, putExtra 데이터 전달, 값 넘기기

Yunikism 2023. 6. 16. 10:09
728x90

Intent

#안드로이드 앱들은 여러 액티비티로 나눠져 있다.

버튼을 누르거나 액션을 취해 다른 액티비티로 전환을 하게 되는 경우가있다.

이럴때 호출이나 메시지를 전달하는 매개체가 바로 Intent ! 이사를 갈때 이삿짐센터와 같다고 생각하면 될것같다.

액티비티를 띄우기 위해 사용되는 메소드는 startActivity()startActivityForResult() 두가지가 있다.

startActivity()

-> 단순하게 어떠한 액티비티를 시작하기 위한 용도

startActivityForResult()

-> 액티비티를 시작하고 결과값을 주고받기 위한 용도

값을 주고받기 위해 startActivityForResult()를 사용해보면

 

    public class MainActivity extends AppCompatActivity {

        public static final int i = 1;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            Button mMoveSub= (Button)findViewById(R.id.sub_move_button); // activity_main.xml에 sub_move_button 버튼 만들기

            mMoveSub.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getApplicationContext(),SubActivity.class);// SubActivity 생성해줘야함
                    startActivityForResult(intent,i); //서브 액티비티 호출
                }
            });
        }
    }

 

 

SubActivity는 텍스트뷰만 하나 만들어서 테스트를 해보자

startActivityForResult()를 통하여 SubActivity를 호출하였다.

액티비티 데이터 전달

데이터를 보내는 메서드는 putExtra()

전 액티비티에서 보낸 값을 받아올때는 getExtra() 이 두 함수만 알고있으면 된다.

(엑티비티 안에있는 텍스트뷰 에딧박스 버튼 등은 아래 코드를 확인하여 xml에 잘 만들어서 진행)

MainActivity

 
    public class MainActivity extends AppCompatActivity {

        public static final int i = 1;

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

            Button mMoveSub = (Button)findViewById(R.id.sub_move_button);

            mMoveSub.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String[] testArr = {"이윤익","이종협","윤문석","김진웅"};

                    Information information = new Information("0105547","부천 범박동");

                    EditText moveData = (EditText)findViewById(R.id.move_text);

                    String mData = moveData.getText().toString();

                    Intent intent = new Intent(getApplicationContext(),SubActivity.class);
                    intent.putExtra("name","이굥의");
                    intent.putExtra("age",28);
                    intent.putExtra("arr",testArr);
                    intent.putExtra("class",information);
                    intent.putExtra("moveData" , mData);

                    startActivityForResult(intent,i);
                }
            });
        }
    }

Information

 
    public class Information implements Serializable{

        String phone_num;
        String addres;

        public Information(String phone_num, String addres){
            this.phone_num = phone_num;
            this.addres = addres;
        }

        public String getPhoneNum() {
            return phone_num;
        }

        public void setPhoneNum(String phone) {
            this.phone_num = phone_num;
        }

        public String getAddres() {
            return addres;
        }

        public void setAddres(String addres) {
            this.addres = addres;
        }
    }

SubActivity

 
    public class SubActivity extends AppCompatActivity {

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

            TextView tx1 = (TextView)findViewById(R.id.textView1);
            TextView tx2 = (TextView)findViewById(R.id.textView2);
            TextView tx3 = (TextView)findViewById(R.id.textView3);
            TextView tx4 = (TextView)findViewById(R.id.textView4);
            TextView tx5 = (TextView)findViewById(R.id.textView5);
            TextView tx14 = (TextView)findViewById(R.id.textView14);

            Intent intent = getIntent();

            //전 액티비티에서 적어준 값
            String moveData = intent.getExtras().getString("moveData");
            tx14.setText(moveData);

            //이름
            String name = intent.getExtras().getString("name");
            tx1.setText(name);

            //나이
            int age = intent.getExtras().getInt("age");
            tx2.setText(String.valueOf(age));

            //배열
            String arr[] = intent.getExtras().getStringArray("arr");
            String add_array="";
            for(String strAr : arr){
                add_array+=strAr+" ";
            }
            tx3.setText(add_array);

            //클래스
            Information information = (Information)intent.getSerializableExtra("class");
            tx4.setText(information.getPhoneNum());
            tx5.setText(information.getAddres());

        }
    }

결과!

첫번째 엑티비티에서 사용자가 입력해준 값도 두번째 엑티비티(SubActivity)에 전달되어서 사용되었다.