뒤로 버튼이 대화 상자를 닫지 방지 방지
Android에서 뒤로 버튼을 누를 때 AlertDialog 상자가 닫히는 것을 방지합니다. 스레드에서이 널리 사용 되는 두 메서드 를 모두 따랐으며 에서 System.out.println을 사용하면 두 경우 모두 코드가 실행되는 것을 볼 수 있습니다 . 그러나 뒤로 단추는 여전히 대화 상자를 닫습니다.
내가 뭘 잘못하고 있니? 즉, 저는 대화 상자를 닫는 뒤로 버튼을 방지합니다. 앱이 처음 실행될 때 표시되는 면책 조항이며 사용자가 "수락"버튼을 누르는 것 외에는 옵션을 선택 실행합니다. 앱이 계속 주문하십시오.
다음 기능을 사용하기 만하면 됩니다.setCancelable()
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(false);
이렇게하면 뒤로 단추가 대화 상자를 닫는 것을 방지 할 수 있습니다.
귀하의 서비스 약관에 동의하지 않는 사용자는 홈 버튼을 누를 수 있습니다. Squonk의 의견에 비추어 볼 때 여기에서 사용자 계약에서 "철회"가 더 있습니다. 하나는 간단한 "거부"버튼이고 다른 하나는 대화 상자의 뒤로 버튼을 재정의합니다.
builder.setNegativeButton("Refuse", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
finish();
return false;
}
});
뒤로 버튼이 대화 상자를 닫는 것을 방지하기 위해 (활동에 의존하지 않고) 다음 코드 만 사용하면됩니다.
alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// Prevent dialog close on back press button
return keyCode == KeyEvent.KEYCODE_BACK;
}
});
사용할 때 대화 상자가 아닌 조각 DialogFragment
을 호출해야합니다 setCancelable()
.
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
dialog = new ProgressDialog(getActivity());
dialog.setIndeterminate(true);
dialog.setMessage(...);
setCancelable(false);
return dialog;
}
부름 dialog.setCancelable()
은 효과가없는 것 가변 . DialogFragment
취소 가능성에 대한 대화 상자의 설정을 인식 하지 않을 것 입니다.
사용하다 setCancelable(false)
SampleDialog sampleDialog = SampleDialog.newInstance();
sampleDialog.setCancelable(false);
sampleDialog.show(getSupportFragmentManager(), SampleDialog.class.getSimpleName());
이것은 나를 위해 일했습니다.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(title);
builder.setMessage(content);
/**
* Make it when the Back button is pressed, the dialog isn't dismissed.
*/
builder.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
Utilities.makeToast(getContext(), "There is no way back!");
return true; // Consumed
}
else {
return false; // Not consumed
}
}
});
Dialog dialog = builder.create();
/**
* Make it so touching on the background activity doesn't close the dialog
*/
dialog.setCanceledOnTouchOutside(false);
return dialog;
보시다시피 dialog.setCanceledOnTouchOutside(false);
, 대화 상자 외부를 탭해도 닫히지 않도록 선을 추가했습니다 .
JQuery Mobile에서 팝업은 URL에 해시를 추가하며, 다음 코드는 열릴 때 팝업을 닫고 닫을 때 앱으로 돌아갈 수 있도록합니다. 사용자 지정 UI 프레임 워크에 대해 동일한 논리를 사용할 수 있습니다.
@Override
public void onBackPressed() {
// check if modal is open #&ui-state=dialog
if (webView.getVisibility() == View.VISIBLE && webView.getUrl().contains("#&ui-state=dialog")) {
// don't pass back button action
if (webView.canGoBack()) {
webView.goBack();
}
} else {
// pass back button action
super.onBackPressed();
}
}
참고 URL : https://stackoverflow.com/questions/12150646/prevent-back-button-from-closing-a-dialog-box
'ProgramingTip' 카테고리의 다른 글
SQL : 하나의 열에 null 값이있을 때 3 개의 열을 더 많이? (0) | 2020.11.19 |
---|---|
ArrayList에는 대소 문자 구분이 포함됩니다. (0) | 2020.11.19 |
기본 CSS- 상단에 반투명 DIV가있는 DIV를 기계하는 방법 (0) | 2020.11.19 |
Jupyter 노트북은 판다 테이블 2 개를 나란히 표시합니다. (0) | 2020.11.19 |
Angular 6 마이그레이션 -.angular-cli.json에서 angular.json으로 (0) | 2020.11.19 |