ProgramingTip

뒤로 버튼이 대화 상자를 닫지 방지 방지

bestdevel 2020. 11. 19. 21:50
반응형

뒤로 버튼이 대화 상자를 닫지 방지 방지


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

반응형