在android中使用自定义对话框时出错

时间:2013-11-17 10:19:42

标签: java android

我正在创建一个自定义对话框,我在显示它时出现了一些错误

代码是:

@Override
                public void onClick(final View v) {
                    // TODO Auto-generated method stub
                    final Dialog dialog = new Dialog(getBaseContext());
                    dialog.setContentView(R.layout.addexpense);
                    dialog.setTitle("Expense Entry");


                    Button cancle, done;  



                    done=(Button)findViewById(R.id.btndone);

               done.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(final View v) {
                            dismissDialog(1);
                        }
                    });
               dialog.show();

                  }
                }); 




    }

它就像有一个按钮和点击事件必须显示一个对话框。但是我收到了错误

java.lang.NullPointerException


ERROR/AndroidRuntime(330):at com.nrp.Display $1.onClick(ViewExpense.java:196)

layout.xml是

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

     <Button android:id="@+id/btndone" 
             android:text="done" 
             android:layout_height="wrap_content"> 
     </Button> 
   </LinearLayout> 

2 个答案:

答案 0 :(得分:0)

在第196行,您想要在按钮上设置监听器。该按钮由findViewById(int id)标识。正如我对您的问题的评论中所提到的,findViewById(int id)可以返回null。

请检查布局XML文件并确保找到该按钮。

答案 1 :(得分:0)

我认为您的完成和取消按钮位于addexpense布局中,当您调用findViewById()时返回npe,因为您的按钮不在主布局中,如果我正确,您必须使用dialog.findViewById()而不是findViewById()