开发者

Android Alert Dialog - how to hide the OK button after it being pressed

开发者 https://www.devze.com 2023-01-27 18:08 出处:网络
I have been developing an Android app. I would like to hide the OK button after the user presses it, as the dialog window will stay at the foreground for some seconds while a computation takes place.

I have been developing an Android app.

I would like to hide the OK button after the user presses it, as the dialog window will stay at the foreground for some seconds while a computation takes place.

This is the code:

    new AlertDialog.Builder(this)
    .setMessage("This may take a while")
    .setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() {                
        @Override
        public void onClick(DialogInterface dialog, int which) {
                       // hide the OK button - how?
                       // a l开发者_JS百科ot of computation
        }
    })
    .show(); 

How can I achieve that?

P.S.: I am not interesting to more advanced techniques to handle a computation (such as: progress dialogs, multi-threading).

Thanks.


.setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
         ((AlertDialog)dialog).getButton(which).setVisibility(View.INVISIBLE);
         // the rest of your stuff
    }
})


setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        dialog.dismiss();

where dialog is DialogInterface.


For anyone else trying to disable the Positive button on an AlertDialog, a lot of these solutions don't seem to work now - you can't grab a reference to the button as soon as you call create on the AlertDialog.Builder, it'll just return null.

So one place it should be available is in onResume, so the way I got this to work was something like this:

var positiveButton: Button? = null

override fun onResume() {
    super.onResume()
    if (positiveButton == null) {
        positiveButton = (dialog as AlertDialog).getButton(AlertDialog.BUTTON_POSITIVE)
    }
}

and that way you should have a reference available whenever your fragment is running, so you can just call positiveButton.isEnabled = false whenever you need to disable it.

Just be careful with your state, a recreated fragment might have some checked boxes or whatever, but it won't have that positiveButton reference yet, and it'll re-run that code in onResume. So if you need to do any initialisation (like disabling the button until the user selects an option) make sure you call a function that checks the current state and decides whether the button should be enabled or not. Don't assume it's just starting up blank!


You can set the visibility of button to invisible.

ok.setVisibility(View.INVISIBLE);
0

精彩评论

暂无评论...
验证码 换一张
取 消