2013-08-24 139 views
9

我是新來的android和調用onclicklistener在對話框中的按鈕時,我得到空指針異常。我該怎麼辦。如何在自定義對話框中設置onclicklistener按鈕

btn_add.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Dialog d=new Dialog(MainActivity.this); 
       d.setContentView(R.layout.activity_main); 
       d.setTitle("Add content"); 
       d.show(); 
       btnsubmit = (Button) findViewById(R.id.btn_submit); 
       btnsubmit.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 

         String name = etName.getText().toString(); 
         String phoneNo = etPhone.getText().toString(); 

         String query = "INSERT INTO PHONE_CONTACTS(name,phone) values ('" 
           + name + "','" + phoneNo + "')"; 
         sqlHandler.executeQuery(query); 
         showList(); 
         etName.setText(""); 
         etPhone.setText(""); 

        } 
       }); 
      } 
     }); 

我真的很感謝你的幫助。 這是我的對話框XML看起來像: -

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity"> 
    <TableLayout 

      android:layout_width="match_parent" 

      android:layout_height="wrap_content" > 



     <TableRow 

       android:id="@+id/tableRow1" 

       android:layout_width="wrap_content" 

       android:layout_height="wrap_content" > 



      <TextView 

        android:id="@+id/textView1" 

        android:layout_width="wrap_content" 

        android:layout_height="wrap_content" 

        android:text="@string/name" /> 



      <EditText 

        android:id="@+id/et_name" 

        android:layout_width="wrap_content" 

        android:layout_height="wrap_content" 

        android:ems="10" > 

      </EditText> 

     </TableRow> 



     <TableRow 

       android:id="@+id/tableRow2" 

       android:layout_width="wrap_content" 

       android:layout_height="wrap_content" > 



      <TextView 

        android:id="@+id/textView1" 

        android:layout_width="wrap_content" 

        android:layout_height="wrap_content" 

        android:text="@string/phone" /> 



      <EditText 

        android:id="@+id/et_phone" 

        android:layout_width="wrap_content" 

        android:layout_height="wrap_content" 

        android:ems="10" > 

      </EditText> 

     </TableRow> 

     <Button 
       android:id="@+id/btn_submit" 
       android:layout_width="80dp" 
       android:layout_height="40dp" 
       android:text="@string/submit" 
       android:layout_centerVertical="true" 
       android:layout_centerHorizontal="true"/> 
    </TableLayout> 

</RelativeLayout> 
+0

張貼堆棧跟蹤,以確認我猜NullPointerException異常的按鈕初始化駁回對話框。 – Raghunandan

回答

10

您需要使用對話框對象初始化意見

btnsubmit = (Button) d.findViewById(R.id.btn_submit); 

此外,如果有EditText上的在您的自定義對話框讓你在初始化它們同樣的方式。

EditText etName = (EdiText) d.findViewById(R.id.et_Name); 
    EditText etPhone = (EdiText) d.findViewById(R.id.et_Phoe); 
+0

Thx它現在開始工作... –

+0

@AbhishekPatidar如果它有助於標記答案是正確的。 – Raghunandan

+0

還有一個好處,我想我該如何從對話中走出去。通過點擊一個按鈕說在對話框中取消 –

1

你可以通過調用dialog.dismiss()

 final Dialog d=new Dialog(MainActivity.this); 
      d.show(); 
      btnsubmit = (Button) d.findViewById(R.id.btn_submit); 
      btnsubmit.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        d.dismiss(); 
       } 
      }); 
+0

謝謝兄弟,這項工作 – vuhung3990

相關問題