본문 바로가기

앱 개발/안드로이드

06_Activity 활용-1

이번 글에서는 안드로이드 Activity 활용편 1 (Activity 이동, 값 넘기기, 클릭 이벤트)에 대해 알아보겠습니다.

 

지난 시간의 파일에 이어서 만듭니다.


1. 버튼으로 동작하기 위해

진정한 버튼의 기능을 구현하기 위해서 Activity창(예; MainActivity.java)에서 인식할 수 있도록

각각의 레이아웃에 이름이 필요합니다.

레이아웃에 이름을 준다는 것은 레이아웃에 id를 부여한다는 것과 같은 말입니다.

 

코드는 아래와 같습니다.

android:id="@+id/TextInputEditText_email"

양식은

android:id="@+id/정하고 싶은 아이디"

입니다.

아이디를 정할 때 함수이름_기능 형식으로 하는 것이 코드 전체를 보았을 때 매우 직관적입니다.

 

여기에 더해 이제 MainActivity.java에서 이 값들을 가져오려면 전역변수를 설정해야 하는데,

.java이기에 JAVA 처럼 앞에 자료형을 반드시 붙여야 합니다.

 

예시로 하나 보자면,

TextInputEditText TextInputEditText_email, TextInputEditText_password;

입니다.

 

 


2. 값 가져오기

이 다음 단계로 화면에서 컴포넌트를 찾기 위해서는 findViewById를 onCreate 부분에서 사용해야 합니다.

 

먼저, MainActivity.java의 코드를 보겠습니다.

package com.electrolion19.learningandroid;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;

import com.google.android.material.textfield.TextInputEditText;

public class MainActivity extends AppCompatActivity {

    TextInputEditText TextInputEditText_email, TextInputEditText_password;
    RelativeLayout RelativeLayout_login;

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


        TextInputEditText_email     = findViewById(R.id.TextInputEditText_email);
        TextInputEditText_password  = findViewById(R.id.TextInputEditText_password);
        RelativeLayout_login        = findViewById(R.id.RelativeLayout_login);


        RelativeLayout_login.setClickable(true);
        RelativeLayout_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = TextInputEditText_email.getText().toString();
                String password = TextInputEditText_password.getText().toString();

                Intent intent = new Intent(MainActivity.this, LoginResultActivity.class);
                intent.putExtra("email", email);
                intent.putExtra("password", password);
                startActivity(intent);
            }
        });
    }

}

위의 예시와 같이, onCreate 부분에서 각각 findViewById를 사용하고 있는데 형식이

XML에서 붙여준 ID = findViewById(R.id.XML에서 붙여준 ID);

입니다.

 

여기까지 실행하면 값을 가져왔다기 보다는 XML의 변수들을 JAVA파일로 가져왔다는 것이 더 옳은 표현입니다.

그 밑에

RelativeLayout_login.setClickable(true);
        RelativeLayout_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String email = TextInputEditText_email.getText().toString();
                String password = TextInputEditText_password.getText().toString();

                Intent intent = new Intent(MainActivity.this, LoginResultActivity.class);
                intent.putExtra("email", email);
                intent.putExtra("password", password);
                startActivity(intent);
            }
        });

에서

setClickable         : 클릭 가능여부 설정

setOnClickListener : 클릭 리스너 설정

입니다.

 

클릭 리스너 설정이라는 것은 이제 클릭한 이후의 동작을 정하는 곳입니다.

(추가적으로 안드로이드/자바 에서는 get은 값 또는 변수 가져오기, set은 변수 설정 및 값 전달을 의미합니다.)

 

위 코드에서 값을 가져오는 것은 new View.OnClickListerner 안 onClick(View v)에서

String email = TextInputEditText_email.getText().toString();
String password = TextInputEditText_password.getText().toString();

부분입니다.

 

마찬가지로 email, password라는 새로운 변수 안에 .getText().toString() 을 사용했습니다.

 

 


3. 클릭 감지

위에서 간단히 SetOnClickLister를 클릭 이후의 동작 정하는 곳이라고 정의했지만

원래 이 함수는 클릭을 감지하는 함수입니다.

 

 


4. 값을 다음 Activity로 넘기기

위에서 지정한 값을 이제 다음 Activity로 넘기기 위해서는 Intent함수를 사용해야 합니다.

Intent함수가 있는 부분만 코드를 보자면,

Intent intent = new Intent(MainActivity.this, LoginResultActivity.class);
intent.putExtra("email", email);
intent.putExtra("password", password);
startActivity(intent);

입니다.

 

첫 번째 줄은 intent라는 새로운 변수를 지정하여 어떤 Activity에서 다른 Activity로 넘긴다는 것을 나타내고 있습니다.

구조는

Intent intent = new Intent(값을 넘길 Activity.this, 값을 받을 Activity.class)

 

두 번째 줄은 값 받은 것을 어떤 이름으로 넘길지를 나타내고 있습니다.

여기에 사용하는 함수는 intent.putExtra인데, 구조는

intent.putExtra("넘길 이름", 넘길 값)

입니다.

 

마지막 줄은 위에서 설정한 intent를 실행한다는 의미입니다.

 

 


5. 다른 Activity에서 값 받고 출력하기

이제, 다른 Activity의 코드를 살펴봅시다.

package com.electrolion19.learningandroid;

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

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.textfield.TextInputEditText;

public class LoginResultActivity extends AppCompatActivity {

    TextView TextView_get;

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

        TextView_get = findViewById(R.id.TextView_get);

        Intent intent = getIntent();

        intent.getExtras();

        Bundle bundle = intent.getExtras();
        String email = bundle.getString("email");
        String password = bundle.getString("password");

        TextView_get.setText(email + " / " + password);

    }

}

먼저 봐야할 것은 TextView_get입니다.

TextView_get은 로그인 화면 이후에

임의로 이메일과 비밀번호를 출력하는 .XML에서 정의한 TextView의 아이디입니다.

 

TextView의 값을 먼저 가져오고, 이후에 넘겨 받은 intent를 처리하는 부분이 나옵니다.

다른 Activity에서는 intent라는 변수를 넘겨 받는 값을 처리하는 함수로 정의되어 있습니다.

이전 Activity에서는 putExtras로 값을 넘겼으니, 여기서는 getExtras로 값을 받습니다.

 

다만 바로 email과 password를 정의해서 받을 순 없고, Bundle 기능을 이용하여

받는 값을 2차 배열 꼴로 받고, 밑에

bundle.getString("값 이름")

으로 해당하는 값을 새로운 변수에 담습니다.

 

마지막 줄로 .setText로 넘겨받은 값들을 일정 형식으로 저장한 후 화면으로 출력합니다.

 


6. 주의사항

여기까지만 코딩하면 에뮬레이팅 시 Login버튼을 누르면 앱이 그냥 종료됩니다.

그 이유는 AndroidManifest에서 .java파일에 대해 안드로이드적인 처리를 해주어야 하는데 정의를 안했기 때문입니다.

 

AndroidMainfest.xml에서 manifest > application에서 activity를 정의하면 됩니다. 코드는

<activity
    android:name=".LoginResultActivity">

</activity>

입니다.

 


7. 실행결과

실행결과 사진을 보면 다음과 같습니다.

로그인 장면
로그인 버튼을 누른 후 출력되는 장면

 

 

다음에는 Activity 활용편-2를 다루겠습니다.

 

▼ 이전글

2022.01.03 - [앱 개발/안드로이드] - 05_앱 레이아웃 따라하기 실전-3

 

05_앱 레이아웃 따라하기 실전-3

이번에 볼 것은 저번 글에 이어서 앱 레이아웃 따라하기 실전편 3입니다. 시작하기에 앞서, 공부하면서 정리하는 글이기에 잘못된 내용이 있을 수도 있습니다. 잘못된 내용이 있다면 댓글로 지

hycee-19-story.tistory.com

 

▼ 다음글

2022.01.04 - [앱 개발/안드로이드] - 07_Activity 활용-2

 

07_Activity 활용-2

이번에는 Activity 활용편 2(EditText활용, 입력 이벤트 리스너)에 대해 알아보겠습니다. 시작하기에 앞서 이 글은 공부하면서 작성하는 것이기 때문에 잘못된 내용이 있을 수도 있습니다. 잘못된 내

hycee-19-story.tistory.com