본 게시글은
'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();
}
}
'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 |