2015-05-04 79 views
1

我曾尝试使用下面的代码创建一个自定义警告对话框 -访问按钮的警告对话框

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(); 

这是它在警告对话框中使用的布局dialog.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:试图调用虚拟方法无效android.widget.Button.setText(java中。 lang.CharSequence)'上的空对象引用

是否有任何其他方式来访问按钮?

回答

1

您正在寻找放错了地方的按钮访问的按钮。

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

,然后用view寻找你buotton

+0

它的工作。感谢您的回答! – Confuse

+0

不用客气 – Blackbelt

1

你可以像这样

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

一是虚增您的自定义视图

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

然后使用dialoglayout作为

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

,现在发现按钮

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

在你的情况下使用

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

使用此代码,这将解决您的problem-

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();