본문 바로가기

안드로이드 스튜디오

[ 안드로이드 ] 액티비티(Activity)와 인텐트(Intent), 단방향 / 양방향 데이터 전달

Intent 사용 예제

* Intent를 사용하기 위하여 Manifest.xml에 액티비티를 넣어주어야한다.

<activity android:name=".SecondActivity" />
<activity 
	android:name=".MainActivity"
   	android:exported="true">

 

1. 화면 전환

// MainActivity.java

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 버튼을 누르면,
        // 다른 액티비티가 화면에 나타나도록 한다.
        Intent intent = new Intent(MainActivity.this, SecondActivity.class);
        startActivity(intent);
    }
});

 

2. 단방향 데이터 전달

// MainActivity.java

// 버튼 클릭 시 데이터 전달
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        
        // EditText에 입력한 데이터를 문자열로 가져온다.
        String email = editEmail.getText().toString().trim();
        String name = editName.getText().toString().trim();
        String ageStr = editAge.getText().toString().trim();

		// 나이는 숫자이므로 정수형으로 변환
        int age = Integer.valueOf(ageStr).intValue();

		// MainActivity에서 SecondActivity로 데이터 전달
        Intent intent = new Intent(MainActivity.this, SecondActivity.class  );

		// 입력한 데이터를 intent로 전달
        intent.putExtra("email", email);
        intent.putExtra("name", name);
        intent.putExtra("age", age);

        startActivity(intent);
});

 

// SecondActivity.java

// 넘어오는 데이터가 있으면 처리해 준다.
// MainActivity에서 보낼 때 사용한 키값으로 데이터를 받는다.
String email = getIntent().getStringExtra("email");
String name = getIntent().getStringExtra("name");
int age = getIntent().getIntExtra("age", 0);

...

// 데이터를 화면에 세팅
txtEmail.setText(email);
txtName.setText(name);
editAge.setText("" +age);

3. 양방향 데이터 전달

// MainActivity.java

// MainActivity에서 데이터를 보내고, 
// SecondActivity에서 보낸 데이터도 받는다.

ActivityResultLauncher<Intent> startActivityResult =
    registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
            new ActivityResultCallback<ActivityResult>() {
                @Override
                public void onActivityResult(ActivityResult result) {
                    // result 에는 resultCode가 있다
                    // resultCode의 값으로, 여러가지 구분해서 사용이 가능.
                    if (result.getResultCode() == 0) {
                        int age = result.getData().getIntExtra("age", 0);
                        editAge.setText("" + age);
                    }

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

        ...
        
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 새로운 액티비티를 띄우고
                // 데이터를 전달한다.
                String email = editEmail.getText().toString().trim();
                String name = editName.getText().toString().trim();
                String ageStr = editAge.getText().toString().trim();

                int age = Integer.valueOf(ageStr).intValue();

                Intent intent = new Intent(MainActivity.this, SecondActivity.class);

                intent.putExtra("email", email);
                intent.putExtra("name", name);
                intent.putExtra("age", age);

                // 실행한 액티비티로부터 데이터를 받아오는 것이 있는 경우
                startActivityResult.launch(intent);
            }
        });
    }

 

// SecondActivity.java

// 버튼 클릭 시, 수정한 데이터 결과 전달
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 1. MainActivity 에서 수정한 나이 데이터를 가져온다.
        String ageStr = editAge.getText().toString().trim();
        int age = Integer.valueOf(ageStr).intValue();

        // 2. 나이 데이터를 MainActivity에 전달한다.
        Intent intent = new Intent(SecondActivity.this, MainActivity.class);
        intent.putExtra("age", age);
        // 호출한 액티비티로 결과 반환
        setResult(0, intent);

        // 3. 이 액티비티는 종료한다.
        finish();

    }
});