티스토리 뷰

먼저 액티비티의 시작부터 종료까지의 과정을 살펴봅시다.



액티비티는 이런 순서로 동작합니다.



그렇다면 액티비티를 사용할때 사용하는 메소드들을 알아봅시다.



하지만 우리는 이런 메소드들을 만든 적이 없을것입니다. 왜냐하면 Android.appcombat.v7.Activity가 위 메소드들을 기본적으로 포함하고 있어서 안드로이 개발 시 필요한 것만 오버라이딩 하여 사용할 수 있게 해주기 때문입니다.




Intent란?

인텐트란 안드로이드 시스템에서 커뮤니케이션을 담당하는 역할로, 컴포넌트간(Activity, ContentProvider, BroadcastReceiver, Service)의 호출과 메시지 전달에 이용됩니다.


EX) 액티비티에서 다른 액티비티로 이동하기



그렇다면 Intent에서 Activity를 어떻게 시작할까요? 그럴때는 아래의 메소드들을 사용하면 됩니다.


startActivity() : 액티비티가 종료된 이후 아무런 값을 가져오지 않음


startActivityForResult() : 액티비티가 종료된 후 값을 받아와야 하는 경우 사용





이제 예제를 보면서 위에 내용들을 더 정확하게 알아봅시다.


● activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
tools:context="com.example.gihyeon.intent.MainActivity">

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    android:text="GoGo"   // 버튼 이름을 GOGO로 지정
    android:onClick="gogo"   // 버튼 클릭시 gogo 메소드 실행
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.501" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="158dp"
        android:ems="10"   // 문자열의 길이는 10글자까지만 받음
        android:hint="액티비티로 넘길 값 입력" 
        android:inputType="textPersonName"
        app:layout_constraintHorizontal_bias="0.503"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

코드를 살펴봅시다.

android:hint="액티비티로 넘길 값 입력"

이 코드는 입력창에 "액티비티로 넘길 값 입력" 메시지가 뜨지만 클릭 시 사용자가 입력할수 있도록 메시지가 사라집니다. 사용자에게 입력창에 무엇을 입력하면 되는지 힌트를 주는것이라고 생각하시면 됩니다.



● MainActivity.java

package com.example.gihyeon.intent;

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

public class MainActivity extends AppCompatActivity {
    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        editText = (EditText) findViewById(R.id.editText);
    }

    public void gogo(View view){
        Intent intent = new Intent(MainActivity.this,TestActivity.class);
        String value = editText.getText().toString();
        intent.putExtra("value",value);
        startActivity(intent);
    }
}


위 java 코드를 살펴봅시다. private EditText 타입 변수인 editText 변수를 선언해주고 onCreate 메소드에서 init 메소드를 실행시켜줍니다. init 메소드는 editText 변수에 activity_main.xml 에서 만든 editText를 넣어줍니다. gogo 메소드는 GOGO 버튼을 눌렀을때 실행되고 intent로 액티비티를 전환시켜주어 value에 입력한 문자열을 담습니다. 그리고 intent를 실행시켜주면 TestActivity.java로 넘어갑니다.



● activity_test.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    tools:context="com.example.gihyeon.intent.TestActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="50dp"   // 입력받은 메시지의 글씨 크기 50dp
        android:textStyle="bold|italic"   // 입력받은 메시지의 글시체 |italic체로 표시
        android:id="@+id/textView"/>

</android.support.constraint.ConstraintLayout>


위 xml 코드는 입력받은 메시지를 보여주는 화면의 코드입니다. 저는 이곳에서 나타날 메시지의 스타일을 조금 바꾸었습니다.



● TestActivity.java

package com.example.gihyeon.intent;

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

public class TestActivity extends AppCompatActivity {
    private TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        Intent intent = getIntent();
        String value = intent.getExtras().getString("value");
        init();
        textView.setText(value);
    }
    private void init(){
        textView=(TextView) findViewById(R.id.textView);
    }
}


위 java 코드를 살펴봅시다. private TextView 형식의 데이터 타입인 textView란 변수를 하나 선언해주고 getIntent 메소드를 실행시켜줍니다. getIntent 메소드는 이 액티비티를 시작하게 한 인텐트를 호출하는 역할이므로 MainActivity.java에 있는 startActivity(intent)를 호출합니다. 그리고 key값이 value인 값을 가져와서 저장합니다. 이것은 사용자가 입력한 값입니다. 그리고 init 메소드를 실행시켜 textView 변수에 xml 코드에서 만든 textView를 넘겨줍니다. 그리고

textView.setText(value);

이 코드는 우리가 입력한 value값을 출력해서 보여주는 코드입니다.




아래 사진은 제가 직접 스마트폰으로 앱을 실행시킨 모습입니다. 보이시는 것처럼 사용자가 입력한 메시지가 화면에 나타납니다.




'Programming > Android' 카테고리의 다른 글

adb 명령어 모음  (0) 2018.04.24
안드로이드 멘토링-(1)  (113) 2017.08.27
안드로이드란 무엇인가?  (107) 2017.08.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함