AlertDialog中的setButton方法已经被弃用。

12

我在我的Eclipse Android项目中使用这段代码

alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
    
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
});

但是Eclipse提示:

此方法已在API级别3中被弃用。使用setButton(int, CharSequence, android.content.DialogInterface.OnClickListener)与BUTTON_POSITIVE

5年后的更新

这是我迈入真正编程世界的第一步。当时我想,“我知道如何制作HTML网站,这肯定很容易编写本地程序代码,所以就开始编码了,根本没看任何文档。” 这是我在这个伟大社区中提出的第一个问题,而这确实是一个糟糕的问题。 我可以给任何初学者程序员一个大建议,那就是:在冒险之前,先有些想法,挖掘一些文献资料,并阅读有关其他人如何制作的开源资料。耐心地阅读遇到的错误,并尝试意识到真正的问题所在。这样你就不会问一些不必要的问题。


3
那个警告不是非常明显吗? - keyser
我想知道,代码是否仍然有效? - Bojan Kseneman
6个回答

37

Java

AlertDialog alert = new AlertDialog.Builder(this).create();
            alert.setTitle("Error");
            alert.setMessage("Sorry, your device doesn't support flash light!");
            alert.setButton(Dialog.BUTTON_POSITIVE,"OK",new DialogInterface.OnClickListener(){

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });

alert.show();

Kotlin
    var alert: AlertDialog = AlertDialog.Builder(this).create()
    alert.setTitle("Error")
    alert.setMessage("Sorry, your device doesn't support flash light!")
    alert.setButton(Dialog.BUTTON_POSITIVE, "OK", DialogInterface.OnClickListener {
            //do your own idea.
            dialog, which -> finish() })
    alert.show()

4
为了确保您的对话框符合设计指南,API 现在为 AlertDialog 提供 3 种类型的按钮: BUTTON_POSITIVE、BUTTON_NEUTRAL 和 BUTTON_NEGATIVE。这也提供了正确的位置支持从右到左。
我建议使用构建器模式来创建您的 AlertDialog。
AlertDialog.Builder builder = new AlertDialog.Builder(myContext);//Context parameter
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
            //do stuff
    }
});
builder.setMessage("some message");
AlertDialog alertDialog = builder.create();

您可以在API参考文档中获取有关AlertDialog.Builder的更多信息。


非常感谢,但它现在显示“AlertDialog.Builder(new View.OnClickListener(){})的构造函数未定义”。 - Ataberk
抱歉,这是从某些代码复制的。参数应该是一个上下文对象。 - dumazy

2
alertDialog=new AlertDialog.Builder(getApplicationContext()).create();
alertDialog.setTitle("Hello");
alertDialog.setMessage("Hai");
alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "hai", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(MainActivity.this, "Thanks", Toast.LENGTH_SHORT).show();
    }
});

alertDialog.show();

太棒了,这几乎是我关于编程的第一个问题。顺便说一下,谢谢。 - Ataberk
请在你的回答中提供解释。 - ADreNaLiNe-DJ
此答案用于直接在您的应用程序中显示警报对话框。 - Kabilan

1
你可以使用这个,但下次最好使用AlertDialog.Builder。
   alertDialog.setButton(DialogInterface.BUTTON_POSITIVE,
            "OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            });

0
你可以使用这个:
alertDialog.setPositiveButton(R.string.yes, yesListener);
alertDialog.setNegativeButton(R.string.no, noListener);

0

setButton(); 方法接受三个参数

  1. 按钮类型
  2. 按钮文本
  3. 消息/OnClickListener // 消息或点击监听器

提供三个参数,它就可以正常工作。如果您不需要第三个参数,可以将其传递为 null。

alertDialog.setButton(BUTTON_POSITIVE, "OK", (DialogInterface.OnClickListener) null);

或者

alertDialog.setButton(BUTTON_POSITIVE, "OK", (Message) null);

如果您不想传递三个参数,请使用AlertDialog.builder的方法setPositiveButton();


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接