[안드로이드] 인텐트 활용 : 데이터 교환(1)

2021. 1. 1. 21:32·Android/Java
반응형

본 게시글은

'Do It! 안드로이드 프로그래밍 개정7판' / '단계별로 배우는 안드로이드 프로그래밍'

두 권의 교재를 통해 학습한 내용을 스스로 정리하는 목적으로 작성한 게시글 입니다.


Do It! 안드로이드 프로그래밍 개정 7판을 읽으면서 느낀 점은

이것 저것 알려주는 내용이 많은 건 좋은데, 아직 설명도 제대로 안한 뒷 내용을 끌어와서 설명하다보니

이해도 제대로 못한 채로 책 속 코드만 그대로 따라서 치고 있는 나를 보게 된다.

 

그 코드에 대한 설명이 제대로 되지 않다보니

이해는 안됐지만 하라는 대로 했더니 책에 나온 대로 결과가 나왔어요! 짠!

이럴 때가 있다. 개인적으로 이번 인텐트 챕터에서 그 문제점이 제일 와닿았다.

 

큰 흐름도를 보고나서, 대충 어떤 식으로 진행이 될지를 파악한다음 보면 더 이해가 잘 될텐데

일단 예제를 작성해보면서 개념 설명을 하는 느낌이 들 때가 있다.

나는 모르는 건 무조건 제대로 이해하고 넘어가려는 성향이 강해서 더 불편하게 느껴졌다.

 

단계별로 배우는 안드로이드 프로그래밍은 그 단점을 잘 보완해주는 책이다.

초보자가 이해하기 쉽게 개념 설명을 잘 해주고 나서 예제를 같이 해본다.

안드로이드를 쌩판 처음으로 배우는 누군가에게 책을 권유한다면

나는 '단계별로 배우는 안드로이드 프로그래밍'을 먼저 읽고나서 'Do it' 을 읽기를 권유하고 싶다.

 

애초에 Do it 책을 산 계기도 Do it 강의만으로 설명이 부족하다고 느껴서였는데,

본 책에서조차 설명이 부족하다고 느낄 줄은..

(강의에서도 intent부터 이해가 안됐고, 책에서도 intent부터 이해가 안됐다ㅋㅋ)

 

이것이 본 포스팅을 통해 내용을 정리하기 시작한 계기이기도 하다

두 책의 장단점이 있으니, 둘 다 읽으면서 서로의 단점을 보완하는 게 좋다고 생각한다.


startActivityForResult 메소드를 활용한 액티비티 간 데이터 교환을 정리하고자 한다.

액티비티 간 데이터 교환 과정은 다음과 같다.

 

인텐트 생성 & 부가 데이터(Extras) 삽입

|

startActivityForResult 메소드로 새로운 액티비티 시작

|

액티비티 시작과 함께 onCreate() 메소드 호출

|

getIntent() 메소드로 전달받은 Intent를 받는다.

부가 데이터도 이 인텐트로부터 받을 수 있다.

|

이 액티비티에서 기존 액티비티로 결과를 리턴하기 위해

새로운 인텐트를 생성

전달할 결과도 부가 데이터로 넣어서 보낸다.

|

setResult 메소드로 기존 액티비티에 전달할 데이터 결정

|

finish()

|

onActivityResult 메소드가 자동 호출된다.

이 메소드의 인텐트로부터 전달 받은 결과를 받을 수 있다.

 

이제 이 과정을 토대로 Do It 안드로이드 프로그래밍의 '도전! 07'

'로그인 화면 구현'을 해보았다.


일단 로그인 화면을 만들고, 메인 메뉴에 해당하는 액티비티도 만들었다

 

로그인 버튼에 액티비티를 띄우는 기능을 달아주었다.

public class MainActivity extends AppCompatActivity {

    public final int LOGIN = 101;

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

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
                startActivityForResult(intent, LOGIN);
            }
        });
    }
}

Do It 에서도 onClick 속성을 설명하기는 하지만,

저자 분은 위 코드 방식 예제를 많이 택하신다.

단계별로 배우는 안드로이드 프로그래밍은 반대로 onClick 속성을 자주 활용하는 것 같다.

 

이제 메인 메뉴 버튼에 각 버튼의 기능에 해당하는 리턴값을 돌려주면서 액티비티를 끝내는 기능을 넣었다.

public class MenuActivity extends AppCompatActivity {

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

    public void onButtonClicked(View v) {
        Intent intent;
        switch (v.getId()) {
            case R.id.button1: // 고객 관리
                intent = new Intent();
                intent.putExtra("name", "고객관리");
                setResult(RESULT_OK, intent);
                finish();
                break;

            case R.id.button2: // 매출 관리
                intent = new Intent();
                intent.putExtra("name", "매출관리");
                setResult(RESULT_OK, intent);
                finish();
                break;

            case R.id.button3: // 상품 관리
                intent = new Intent();
                intent.putExtra("name", "상품관리");
                setResult(RESULT_OK, intent);
                finish();
                break;
        }
    }
}

switch 문을 활용한 코딩 방식은 '단계별로 배우는 안드로이드 프로그래밍' 책에서 배웠다.

덕분에 v 에 해당하는 것이 현재 이 메소드를 호출한 버튼임을 확실히 기억할 수 있었다.

 

새로 인텐트를 만들고, 부가데이터로 버튼에 적혀있던 텍스트를 넣었다.

결과값을 설정하고 현재 액티비티를 끝내주는 것으로 메뉴 액티비티 속 뷰의 역할은 끝.

 

메인 액티비티의 코드에서 전달 받은 인텐트를 토스트로 띄워주면 이 프로젝트는 해결된다.

public class MainActivity extends AppCompatActivity {

    public final int LOGIN = 101;

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

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
                startActivityForResult(intent, LOGIN);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Toast.makeText(this, data.getStringExtra("name"), Toast.LENGTH_SHORT).show();
    }
}

012

반응형
저작자표시 비영리 변경금지 (새창열림)

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

[안드로이드] getWidth() 와 getMeasuredWidth()  (0) 2021.03.20
[안드로이드] Constraint Layout 동적 생성 후 동적으로 뷰 추가하기  (0) 2021.03.20
[안드로이드] 프래그먼트(Fragment)  (0) 2021.01.03
[안드로이드] 인텐트 활용 : 데이터 교환(2)  (0) 2021.01.02
[안드로이드] 인텐트의 개념  (0) 2021.01.01
'Android/Java' 카테고리의 다른 글
  • [안드로이드] Constraint Layout 동적 생성 후 동적으로 뷰 추가하기
  • [안드로이드] 프래그먼트(Fragment)
  • [안드로이드] 인텐트 활용 : 데이터 교환(2)
  • [안드로이드] 인텐트의 개념
에버듀
에버듀
개발은 좋은데 뭘로 개발할까
  • 에버듀
    Blog. 에버듀
    에버듀
  • 전체
    오늘
    어제
    • 분류 전체보기 (615)
      • 개인 프로젝트 (43)
        • 토이 프로젝트 (3)
        • [2020] 카카오톡 봇 (9)
        • [2021] 코드악보 공유APP (22)
        • [2022] 유튜브 뮤직 클론코딩 (9)
        • [2025] 한글 SQL 데이터베이스 (0)
      • 팀 프로젝트 (22)
        • [2020] 인공지능 숫자야구 (4)
        • [2022] OSAM 온라인 해커톤 (10)
        • [2024] GDSC 프로젝트 트랙 (6)
        • [2025] 큰소리 웹 페이지 (2)
      • CS (335)
        • 자료구조 (19)
        • 어셈블리 (41)
        • 멀티미디어응용수학 (7)
        • 컴퓨터 구조 (29)
        • 알고리즘 분석 (4)
        • 컴퓨터 네트워크 (38)
        • 프로그래밍언어론 (15)
        • HCI 윈도우즈프로그래밍 (26)
        • 기초데이터베이스 (29)
        • 운영체제 (23)
        • 오토마타 (24)
        • 문제해결기법 (11)
        • 블록체인 (22)
        • 소프트웨어공학 (21)
        • 기계학습심화 (12)
        • 컴퓨터그래픽스와 메타버스 (8)
        • 분산시스템특론 (6)
      • 자기계발 (45)
        • 생각 정리 (23)
        • 대외활동 (11)
        • 동아리 (7)
        • 자격증 (3)
        • 머니 스터디 (1)
      • 알고리즘 (PS) (107)
        • BOJ (101)
        • Programmers (5)
        • 알고리즘 이모저모 (1)
      • WEB(BE) (8)
        • express.js (1)
        • Spring & Spring Boot (7)
      • WEB(FE) (2)
        • html, css, js (1)
        • React.js (1)
      • Tool & Language (6)
        • Edit Plus (1)
        • Git (1)
        • Python3 (2)
        • Java (2)
      • Infra (12)
        • AWS (1)
        • Oracle Cloud (8)
        • Firebase (2)
        • Network (1)
      • Android (18)
        • Java (6)
        • Flutter (12)
      • Window (2)
        • Visual Studio 없이 WPF (1)
        • MFC (1)
      • 독서 (14)
        • Inside Javascript (7)
        • Database Internals (6)
        • 한 글 후기 (1)
  • 링크

    • github
    • website
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
에버듀
[안드로이드] 인텐트 활용 : 데이터 교환(1)
상단으로

티스토리툴바