Android

[안드로이드/기초] 인텐트(Intent) - 액티비티 간 데이터 전달

유정주 2021. 7. 25. 17:07
반응형

인텐트(Intent) - 액티비티 간 데이터 전달

안녕하세요.

오늘은 안드로이드 기초 Intent를 이용한 액티비티 간 데이터 전달에 대해 알아보겠습니다.

MainActivity에서 텍스트를 입력하고 버튼을 눌러 SubActivity로 텍스트를 전달, 표시해주는 예제입니다.

 

이전 예제 파일에서 이어서 진행됩니다.

[안드로이드/기초] 인텐트(Intent) - 액티비티(화면) 이동하기 (https://jeong9216.tistory.com/5)

 

[안드로이드/기초] 인텐트(Intent) - 액티비티(화면) 이동하기

인텐트(Intent) - 액티비티(화면) 이동하기 안녕하세요. 개발새발 블로그입니다. 오늘은 안드로이드 기초 Intent를 이용한 액티비티 이동에 대해 알아보겠습니다. MainActivity에서 버튼을 눌러 SubActivit

jeong9216.tistory.com

 

예제 Git

https://github.com/Yujeongju/blogExample/tree/2021-07-25-intent

 

GitHub - Yujeongju/blogExample: 개발새발(https://jeong9216.tistory.com/) 블로그 예제입니다.

개발새발(https://jeong9216.tistory.com/) 블로그 예제입니다. . Contribute to Yujeongju/blogExample development by creating an account on GitHub.

github.com

 

Android API reference

https://developer.android.com/reference/android/content/Intent

 

Intent  |  Android 개발자  |  Android Developers

 

developer.android.com

 


1. MainActivity에 텍스트 입력창 EditText 추가하기

텍스트를 입력할 수 있는 EditText를 추가해 줍니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <EditText
        android:id="@+id/input_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:imeOptions="actionDone"/>

    <Button
        android:id="@+id/final_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="글자 전달!!"/>
</LinearLayout>

 

아래 사진처럼 화면이 나오면 됩니다!

SubActivity로 전달할 텍스트를 입력할 수 있는 EditText가 추가되었습니다.

 

2. MainActivity에서 데이터 전달하기

저번 예제에서는 단순히 화면만 전달되는 코드만 있었습니다.

액티비티간 데이터를 전달하려면 putExtra(key, data)를 이용하면 됩니다.

EditText에서 입력한 텍스트를 가져오고 그것을 SubActivity로 전달하는 코드를 추가하겠습니다.

public class MainActivity extends AppCompatActivity {

    EditText editText;
    Button button;

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

    private void init() {
        editText = findViewById(R.id.input_et);
        button = findViewById(R.id.final_btn); //xml에서 생성한 id 매치
    }

    private void SettingListener() {
        //버튼에 클릭 이벤트 적용
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String input = editText.getText().toString(); //editText에 입력한 문자열을 얻어 온다.

                //인텐트 선언 및 정의
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                //입력한 input값을 intent로 전달한다.
                intent.putExtra("text", input);
                //액티비티 이동
                startActivity(intent);
            }
        });
    }
}

putExtra 메소드를 이용해 데이터를 전달할 수 있습니다.

첫 번째 인자는 값으로 이 키 값으로 데이터를 받아야 합니다.

두 번째 인자는 전달한 데이터입니다.

저는 EditText의 문자열을 전달할 데이터로 사용하겠습니다.

 

3. SubActivity에서 데이터 받기

public class SubActivity extends AppCompatActivity {

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

        Intent intent = getIntent(); //전달할 데이터를 받을 Intent
        //text 키값으로 데이터를 받는다. String을 받아야 하므로 getStringExtra()를 사용함
        String text = intent.getStringExtra("text");

        TextView text_tv = findViewById(R.id.text_tv);
        text_tv.setText(text);
    }
}

데이터를 받을 때는 getIntent()를 이용하여 인텐트를 생성합니다.

생성한 인텐트에서 String value를 받아야하므로 getStringExtra()를 사용합니다.

받아온 String 데이터를 텍스트뷰에 넣습니다.


완성 영상

 

MainActivity에서 EditText에 텍스트를 입력하고 버튼을 누르면

인텐트(intent)를 이용해 데이터를 전달합니다.

SubActivity에서도 인텐트를 이용해 데이터를 받아 출력합니다.

 

감사합니다.

 


아직은 초보 개발자입니다.

더 효율적인 코드 훈수 환영합니다!

공감 댓글 부탁드립니다.

반응형