繁体   English   中英

自定义警报对话框中的访问按钮

[英]Access buttons in custom alert dialog

我使用以下代码创建了一个自定义警报对话框-

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = this.getLayoutInflater();

builder.setView(inflater.inflate(R.layout.dialog, null))
       .setTitle("test")
       .setCancelable(true);

AlertDialog alert11 = builder.create();
alert11.show();

这是警报对话框中使用的layoutdialog.xml的代码-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cancel" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Set"/>

</LinearLayout>

现在,如何获取按钮的参考以设置点击侦听器?

我试过了-

Button mButton = (Button) findViewById(R.id.button1);

但我有一个例外-

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void android.widget.Button.setText(java.lang.CharSequence)'

还有其他方法可以访问该按钮吗?

您可以像这样访问按钮

Button dialogButton = (Button) alert11.findViewById(R.id.button1);

您在错误的位置寻找按钮。

View view = inflater.inflate(R.layout.dialog, null);
builder.setView(view)
       .setTitle("test")
       .setCancelable(true);

然后使用view查找您的按钮

您可以根据要求自定义完整的警报对话框。请检查此答案。Android-更改对话框按钮的位置

首先将您的自定义视图扩展为

View dialoglayout = inflater.inflate(R.layout.dialog, null);

然后使用dialoglayout作为

  builder.setView(dialoglayout)
   .setTitle("test")
   .setCancelable(true);

现在找到按钮为

Button mButton = (Button) dialoglayout.findViewById(R.id.button1);

在您的情况下使用

Button mButton = (Button)(inflater.inflate(R.layout.dialog, null)). findViewById(R.id.button1);

使用此代码可以解决您的问题-

View view = (LinearLayout) getLayoutInflater()
                .inflate(R.layout.dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setView(view);
final AlertDialog mDialog = builder.create();
mDialog.setCancelable(false);

Button mButton = (Button) view.findViewById(R.id.button1);
mDialog.show();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM