Android Studio : Intent

gundorit·2022년 11월 8일
0

안드로이드

목록 보기
4/8

목차

  1. Intent란?
  2. Intent를 이용해 화면 전환 하기
  3. Activity간 데이터를 주고 받기

Intent란?

어플리케이션은 화면들의 모음집이다. 안드로이드의 역할은 사용자의 요구에 맞춰서 적절하게 전환해주는 것이다.

가령 A라는 화면이 있고 특정 버튼을 누르면 B 화면으로 넘어가도록 구현한다고 가정해보자.

버튼을 누르면 Intent 객체에 현재 화면과 넘어가고자 하는 화면이 매개변수로 전달될 것이다.

따라서 화면 전환에 필요한 것이 바로 Intent라고 생각하면 된다.

Intent로 실행할 수 있는 컴포넌트는 다음과 같다

액티비티, 서비스, 방송 수신자

Intent는 크게 두 부류로 나눌 수 있다

명시적 인텐트, 암시적 인텐트

Intent를 이용해 화면 전환 하기

패키지를 실행하면 기본적으로 MainActivity가 존재할 것이다. 두 화면 간의 전환을 보이기 위해 또 다른 Activity를 생성해보자.

Activity의 이름은 SubActivity로 설정하자.

우리가 구현할 것은 버튼을 누르면 화면 전환이 이루어지는 것이다. 따라서 버튼을 만들고 해당 버튼에 Intent 객체를 추가할 것이다.

activity_main.xml 코드는 다음과 같다.

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

    <Button
        android:id="@+id/btn_move"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Move"
        android:background="#FFFFFF">
    </Button>
</LinearLayout>

이제는 자바 코드에서 기능을 구현할 차례이다.
Button 객체를 만들어 xml 에서 만든 버튼과 연결하도록 하자

btn_move = (Button)findViewById(R.id.btn_move);

다음은 버튼을 클릭했을 때의 이벤트를 정의하는 함수이다.

btn_move.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                startActivity(intent); // 액티비티 이동
            }
        });

Intent 객체를 생성하고, 생성자의 매개 변수로 현재 컴포넌트와 이동할 컴포넌트를 넣는다.
이 때 현재 컴포넌트는 .this, 이동할 컴포넌트는 .class다.

다음은 startActivity(); 함수에 intent 객체를 넣어주는 것이다.

완성한 코드

import androidx.appcompat.app.AppCompatActivity;

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

public class MainActivity extends AppCompatActivity {

    private Button btn_move;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_move = (Button)findViewById(R.id.btn_move);

        btn_move.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                startActivity(intent); // 액티비티 이동
            }
        });
    }
}

Activity간 데이터를 주고 받기

MainActivity 코드

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 MainActivity extends AppCompatActivity {

    private EditText ed_test;
    private Button btn_move;
    private String str;

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

        ed_test = (EditText) findViewById(R.id.ed_test);

        btn_move = (Button) findViewById(R.id.btn_move);
        btn_move.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                str = ed_test.getText().toString();
                Intent intent = new Intent(MainActivity.this, SubActivity.class);
                intent.putExtra("str", str);
                startActivity(intent); // 액티비티 이동
            }
        });
    }
}

SubActivity 코드

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;

public class SubActivity extends AppCompatActivity {

    private TextView tv_test;

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

        Intent intent = getIntent();
        String str = intent.getStringExtra("str");

        tv_test = (TextView) findViewById(R.id.tv_test);
        tv_test.setText(str);
    }
}

주의할 점

  1. 만약 getText() 메소드를 onClick 메소드가 아닌 onCreate() 메소드 안에 정의하였다면, getText()의 호출은 onCreate()가 호출 될 때, 즉 안드로이드 앱이 실행될 때 호출되기 때문에 사용자가 값을 입력하기도 전에 공백으로 초기화 된다.

    따라서 입력이 끝나고 버튼을 눌렀을 때 getText()가 실행 될 수 있도록 onClick() 메소드 내에 정의하는 것이 맞다.

  2. getText()는 String 형이 아니기 때문에 String으로 값을 넘겨준다면 toString() 메소드를 이용해 형변환을 해줄 필요가 있다.

  3. putExtra()와 getStringExtra() 는 key 값을 통해 데이터를 주고 받는다.

참조

  1. 유튜브 홍드로이드의 "안드로이드 앱 만들기 #3 (Intent 화면전환) - 쉽게 앱 만드는 방법 (현직 개발자 설명) , android studio easy tutorial" 을 참고하였음
profile
나는 내일 무엇을 배울까 :)

0개의 댓글