⭐주요 메서드⭐
- postAtTime
- postDelayed : 약간의 시간이 지난 후 코드가 실행됨. (ex. handler.postDelayed(new Runnable(){...}, 1000);
- sendMessageAtTime : 메시지를 보낼 때의 시간 지정 가능
- sendMessageDelayed : 메시지를 일정 시간이 지난 후 보내짐
0️⃣예제 실행화면
1️⃣activity_main.xml
2️⃣MainActivity.java
메서드를 2개 만든다. (request, makeRequestDialog)
package com.example.chapter9_2;
public class MainActivity extends AppCompatActivity {
TextView textView;
Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
request();
}
});
}
private void request() {
String title = "원격 요청";
String message = "데이터를 요청하시겠습니까?";
String titleButtonYes = "예";
String titleButtonNo = "아니오";
AlertDialog dialog = makeRequestDialog(title, message, titleButtonYes, titleButtonNo);
dialog.show();
textView.setText("대화상자 표시중...");
}
private AlertDialog makeRequestDialog(String title, String message, String titleButtonYes, String titleButtonNo) {
AlertDialog.Builder requestDialog = new AlertDialog.Builder(this);
requestDialog.setTitle(title);
requestDialog.setMessage(message);
// 예 버튼
requestDialog.setPositiveButton(titleButtonYes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
textView.setText("5초 후에 결과 표시됨.");
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("요청 완료됨.");
}
}, 5000);
}
});
// 아니오 버튼
requestDialog.setNegativeButton(titleButtonNo, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
return requestDialog.create();
}
}
🔹request()🔹
private void request() {
String title = "원격 요청";
String message = "데이터를 요청하시겠습니까?";
String titleButtonYes = "예";
String titleButtonNo = "아니오";
AlertDialog dialog = makeRequestDialog(title, message, titleButtonYes, titleButtonNo);
dialog.show();
textView.setText("대화상자 표시중...");
}
makeRequestDialog 메서드를 이용하여 AlertDialog 객체를 만든 뒤 show로 나타낸다.
🔹makeRequestDialog
private AlertDialog makeRequestDialog(String title, String message, String titleButtonYes, String titleButtonNo) {
AlertDialog.Builder requestDialog = new AlertDialog.Builder(this);
requestDialog.setTitle(title);
requestDialog.setMessage(message);
AlertDialog.Builder 객체를 생성하여 AlertDialog의 다양한 디자인을 구축할 수 있다.
// 예 버튼
requestDialog.setPositiveButton(titleButtonYes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
textView.setText("5초 후에 결과 표시됨.");
handler.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("요청 완료됨.");
}
}, 5000);
}
});
postDelayed 메서드를 사용하여 5초 뒤 "요청 완료됨" 메시지가 세팅되도록 한다.
// 아니오 버튼
requestDialog.setNegativeButton(titleButtonNo, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
아니오 버튼은 아무 기능도 없다.
return requestDialog.create();
}
마지막엔 만들어진 객체를 반환한다.
3️⃣실행 결과
'요청하기' 버튼을 클릭하면 dialog 박스가 뜬다.
💩에러 발생
더보기
![](https://blog.kakaocdn.net/dn/cXKLBn/btsL0Gnk6EU/cszMgXcjy8W3uBhV0Mx3c0/img.png)
![](https://blog.kakaocdn.net/dn/bQb6m7/btsLZI0OYH3/e9A5L55xQ81IJLk1yBTNBK/img.png)
![](https://blog.kakaocdn.net/dn/vBIvt/btsL1dx5lYX/zRHL8DQnbKczUkAe6FSDjk/img.png)
![](https://blog.kakaocdn.net/dn/cXKLBn/btsL0Gnk6EU/cszMgXcjy8W3uBhV0Mx3c0/img.png)
Handler 부분에 문제가 있다는 것 같았다.
보니까 Handler 객체를 생성하지 않아서 발생한 문제. (선언만 해줌)
![](https://blog.kakaocdn.net/dn/bQb6m7/btsLZI0OYH3/e9A5L55xQ81IJLk1yBTNBK/img.png)
↓
![](https://blog.kakaocdn.net/dn/vBIvt/btsL1dx5lYX/zRHL8DQnbKczUkAe6FSDjk/img.png)
바꿔주니 해결.
'TIL > 안드로이드 스튜디오' 카테고리의 다른 글
도전!17 - 패널을 번갈아가며 보여주기 (0) | 2025.01.26 |
---|---|
9장 - 스레드로 애니메이션 만들기 (0) | 2025.01.24 |
9장 - 스레드와 핸들러 (0) | 2025.01.22 |
도전!16 - 웹브라우저 화면 구성 (0) | 2025.01.21 |
도전!15 - 입력 화면의 애니메이션 (0) | 2025.01.21 |