[Ch3-3] 진행상황 다이얼로그 표시하기, Displaying a progress dialog (Processing Message dialog box)
Android Studio 공부 시작 2019. 6. 6. 23:18어플을 처음에 키거나, 또는 다른 작업을 실행시켜서 넘어갈 때, 몇몇 간지 나는 어플은 "잠시만 기다려 주세요." "처리 중입니다." 등의 젠틀하고 멋있는 메시지를 중간에 표기한다. (아래의 화면과 같이 말이다.)
우리도 한번 만들어 보자.
자 우선 프로젝트를 기존에 사용하던 헬로 월드를 그대로 사용하거나, 그 프로젝트가 너무 지저분해졌다면 그냥 Empty 액티비티로 하나 새로 만들자.
그 후에 다음과 같이 MainActivity.java 를 변경한다.
package com.example.activity102; // Package 이름이 com.example.activity102 가 아니라면 변경
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.ProgressDialog; // 추가
import android.os.CountDownTimer; // 추가
public class MainActivity extends AppCompatActivity {
ProgressDialog progressDialog; // 추가
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/* 아래로 다 추가 */
public void onStart() {
super.onStart();
progressDialog = ProgressDialog.show(this, "잠시만 기다려주세요.", "진행중입니다.",true);
CountDownTimer timer = new CountDownTimer(3000,1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
progressDialog.dismiss();
}
}.start();
}
}
** Package 는 나와 다를 수 있으니, 각자 자기가 사용하는 것으로 변경 **
우선 ProgressDialog 클래스에서 progressDIalog = ProgressDialog.show(thsi, "잠시만 기다려주세요.", "진행 중입니다.", true); 를 통해 인스턴스를 생성(인스턴스화)한다.
알고 있다. 나도 이 글을 쓰면서 클래스, 인스턴스, 객체의 한방에 이해 가능한 글을 찾아 헤매었고, 나 스스로 이해할만한 결과를 찾지 못해 우선은 그냥 넘어간다. 단순히 인스턴스화 하면 메모리에 잡힌다는 것 정도만 획득하였다.
**우선 넘어가는 이유 중 가장 큰 이유는, 저런 세세한걸 다 이해하려다 내 풀에 내가 지쳐 그간 얼마나 많은 시도를 하였고 포기를 하였는지 정말 셀 수도 없다. 이번 공부는 기능의 우선 구현에 초점을 맞추고, 개념은 차차 보완해 나갈 예정이다. Android Studio 공부 이외에 다른 신규 공부에서 보완해 나갈 수도 있다.
우리가 여기서 사용하는 다이얼로그의 종류는 모들 윈도, 모들 다이얼로그 (modal dialog) 인데, 이 종류는 기존에 작업하던 UI는 다이얼로그 박스가 종료되기 전까지 우선 멈추어있는 형태이다.
코드를 보면 알겠지만 다이얼로그는 progressDIalog.dismiss() 메서드와 함께 종료된다. (그럼 언제??)
눈매가 예리한 병아리는 눈치 챘을게다. CountDownTimer timer = new CountDownTimer(3000,1000) 인스턴스로 우리는 이미 3초간의 대기 시간을 만들었다, import 부분에서 CountDownTimer를 가져왔음을 확인하자.
어쨌든, 다이얼로그는 실행되고 난 후 CountDownTImer timer = new CountDownTimer(3000,1000)로 3초간 대기 후 그다음 dismiss() 메서드 콜로 다이얼로그는 사라진다..ㅠ (잘 가...)
마무리하기 전 궁금한 사항이 있어 하나 해본다.
-------------------------------
ProgressDialog progressDialog라고 우선 선언했는데 왜 timer는 인스턴스를 만드는 시점에서 선언했는가?
바꿔보자.
package com.example.activity102;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.ProgressDialog;
import android.os.CountDownTimer;
public class MainActivity extends AppCompatActivity {
ProgressDialog progressDialog;
CountDownTimer timer; // timer 를 이쪽으로 옮김
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onStart() {
super.onStart();
progressDialog = ProgressDialog.show(this, "잠시만 기다려주세요.", "진행중입니다.",true);
timer = new CountDownTimer(3000,1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
progressDialog.dismiss();
}
}.start();
}
}
이렇게 바꿔도 사실 잘 되더라, 무슨 차이인지는 모르겠다. 그런데
ProgressDialog progressDialog; 부분을 지우고 ProgressDialog progressDialog = ProgressDialog.show(this,......)로 바꾸었을 때는 에러가 나더라. 나중에 왜 그런지 확인해봐야겠다.
.
'Android Studio 공부 시작' 카테고리의 다른 글
emulator full queue dropping event current drop count 문제 해결 (0) | 2019.06.16 |
---|---|
[Ch3-4] 안드로이드 인텐트 사용하여 액티비티 연결하기 (Using intents to link activities) (0) | 2019.06.12 |
[Ch3-2] 액티비티의 생명 주기 (life cycle of an activity) (0) | 2019.06.06 |
[Ch3-1] 안드로이드의 중요 개념, 내맘대로 쉽게 이해하는 액티비티 (Activities) (0) | 2019.06.06 |
[Ch2-4] 안드로이드 스튜디오 APK 생성 및 App bundle 생성 (0) | 2019.06.05 |