본문 바로가기

TOOL/Android Studio

Android Studio - Activity간의 양방향 데이터 전달 방법

반응형

 

 

 

MainActivity.java

 

package com.graphene911.data;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContract;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    EditText editEmail;
    EditText editName;
    EditText editAge;

    Button button;
    
    // 내가 실행한 액티비티로부터 데이터를 받아와서 처리하는 코드
    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);

        editEmail = findViewById(R.id.editEmail);
        editName = findViewById(R.id.editName);
        editAge = findViewById(R.id.editAge);
        button = findViewById(R.id.button);

        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();

                double hiddenData = 3.1414;

                // 새로운 액티비티를 띄우고 데이터를 전달한다.
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);

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

                // 데이터만 전달하는 경우
//                startActivity(intent);

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


            }
        });

    }
}

 

 

 

 

 

SecondActivity.java

 

package com.graphene911.data;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {

    TextView txtEmail;
    TextView txtName;
    EditText editAge;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        // 넘어오는 데이터가 있으면 처리해 준다.
        String email = getIntent().getStringExtra("email");
        String name = getIntent().getStringExtra("name");
        int age = getIntent().getIntExtra("age", 0);
        double hiddenData = getIntent().getDoubleExtra("hidden", 0);

        // 화면과 연결
        txtEmail = findViewById(R.id.txtEmail);
        txtName = findViewById(R.id.txtName);
        editAge = findViewById(R.id.editAge);
        button = findViewById(R.id.button);

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

        // 버튼 이벤트 처리
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // 1. 수정한 나이 데이터를 가져온다.
                String ageStr = editAge.getText().toString().trim();
                int age = Integer.valueOf(ageStr).intValue();

                // 2. 이 나이 데이터를 MainActivity 에 전달한다.
                Intent intent = new Intent();
                intent.putExtra("age", age);
                setResult(0, intent);

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


            }
        });




    }
}

 

반응형