만족

[Android Studio] Dialog 본문

[Android Studio] Dialog

FrontEnd/Android Satisfaction 2017. 7. 27. 04:11

https://developer.android.com/guide/topics/ui/dialogs.html?hl=ko#FullscreenDialog


Dialog는 액티비티를 띄우는 것 처럼 화면 전체를 차지하여 내용을 표시하는 것이 아닌


작은 대화상자 모양을 이용하여 사용자에게 내용을 표시할 수 있게 해줍니다.


AlertDialog클래스를 직접 이용하여 만들 수도 있지만

API에서는 AlertDialog.Builder 클래스를 이용하여 만드는 것을 권장합니다.


AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("표시할 메시지")
.setPositiveButton(
"긍정 버튼에 표시될 텍스트", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {

//긍정 버튼을 클릭했을 때, 실행할 동작
}
})
.setNegativeButton(
"부정 버튼에 표시될 텍스트", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {

//부정 버튼을 클릭했을 때, 실행할 동작
}
})
;

먼저 위와 같은 형태의 코드를 작성합니다.


setMesaage, setPositiveButton, setNegativeButton메소드는 모두 AlertDialog.Builder 타입 클래스를 반환하기 때문에

위처럼 체인 형식으로 사용이 가능합니다.


그 다음


builder.create().show();


처럼 작성해주면 다이얼로그가 표시되게 됩니다.


단순히 메시지와 긍정/부정 버튼을 표시하는 것 뿐만 아니라, 다이얼로그에 View나 List를 추가할 수도 있습니다.


해당 방법은 위의 Android API를 참조하세요!


긍정/부정 버튼을 눌렀을 때의 동작


긍정 버튼을 누르게 되면 자동적으로 다이얼로그의 dismiss()메소드가 발동되게 됩니다.


dismiss()는 onCancel()메소드를 호출하게 되고, 결과적으로 다이얼로그가 종료되게 됩니다.


부정 버튼을 누르게 되면, onCancel()메소드를 호출하게 되고, 이 역시 다이얼로그가 종료되게 됩니다.


그런데, 버튼을 누르더라도 다이얼로그를 종료하고 싶지 않다면 어떻게 해야 할까요?


builder.create().show()를 지우고 난 뒤 아래 코드를 추가해 줍니다.


final AlertDialog dialog=builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface d) {
dialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//Prevent to close dialog when positive button is clicked.
//긍정 버튼을 클릭했을 때, 실행할 동작
}
});
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Prevent to close dialog when negative button is clicked.
//부정 버튼을 클릭했을 때, 실행할 동작
}
});
}
});


이렇게 하면, dialog의 긍정/부정 버튼에 추가되어 있는 Listener를 바꿀 수 있게 됩니다.

(즉 dismiss()와 onCancel()메소드가 발동되지 않게 됩니다!)


하지만 이제 자동적으로 dismiss()와 onCancel()이 호출되지 않으므로 직접 추가하여 다이얼로그를 종료해야 합니다.



Comments