프로그래밍/안드로이드

안드로이드 - 5. 인텐트를 이용한 화면 전환

가카리 2017. 9. 29. 23:13
반응형
안드로이드 타겟 버전 : 4.2(젤리빈)




예제 소스 



안드로이드 어플리케이션의 네가지 구성 요소는 Activity, Service, Broadcast Receiver, Content Provider가 있습니다. 


인텐트(Intent)란 이러한 어플리케이션 구성요소(컴포넌트) 간에 작업 수행을 위한 정보를 전달하는 역할을 한다.  인텐트를 가장 손쉽게 사용한 예로는 액티비티간의 화면전환을 들 수 있습니다. 


  • startActivity() -새로운 액티비티를 화면에 띄울 때
  • startService(), bindService() – 서비스와 관련
  • broadcastIntent() – 브로드캐스팅을 수행할 때



매니페스트 파일에 새로운 액티비티에 대한 정보를 추가해야합니다.

여기서는  SubActivity라는 액티비티에 대한 정보를 추가해줬습니다.


AndroidManifest.xml



<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.kch.tutorial6_activity">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".SubActivity">

        </activity>
    </application>

</manifest>


activity_main.xml

간단히 EditText와 TextView만 있습니다.


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.kch.tutorial6_activity.MainActivity">


    <EditText
        android:id="@+id/nameText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="name"
        android:inputType="textPersonName"
        android:text="Name"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp" />

    <Button
        android:id="@+id/nameButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Transfer"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/nameText1"
        app:layout_constraintVertical_bias="0.032" />
</android.support.constraint.ConstraintLayout>



activity_sub.xml

TextView 한개만 존재합니다.


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

    <TextView
        android:id="@+id/nameText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Display2" />
</LinearLayout>

 MainActivity.java


package com.example.kch.tutorial6_activity;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

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

        final EditText nameText = (EditText)findViewById(R.id.nameText1);
        Button nameButton = (Button)findViewById(R.id.nameButton);

        nameButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = nameText.getText().toString();//EditText로부터 값을 가져옴

                //인텐트 생성
                Intent intent = new Intent(getApplicationContext(), SubActivity.class);
                intent.putExtra("nameText", name);//값을 넣어줌
                startActivity(intent);//다음 액티비티로 이동
            }
        });

    }
}


SubActivity.java


package com.example.kch.tutorial6_activity;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

/**
* Created by kch on 2017. 9. 24..
*/

public class SubActivity extends AppCompatActivity{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_sub);
        TextView textView = (TextView)findViewById(R.id.nameText2);
        Intent intent = getIntent();
        textView.setText(intent.getStringExtra("nameText").toString());//가져온 값을 뿌려줌
    }
}

실행 화면


다음과 같은 MainActivity에서 이름을 입력해주고 버튼을 눌러봅시다.




다음과 같이 입력한 데이터가 다른 액티비티로 제대로 전송됨을 알 수 있습니다.