0

我有一個AlertDialog內的充氣佈局。當我提到它的一個視圖時,我得到一個NullpointerException。NullpointerException在充氣查看

ID爲spinner視圖位於佈局dialog_with_spinner.xml內:

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

    <LinearLayout 
     android:id="@+id/linear" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="20dp"> 

     <TextView 
      android:id="@+id/info" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="left" 
      android:text="@string/info_title" /> 

     <Spinner 
      android:id="@+id/spinner" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="right" 
      android:entries="@array/entries" 
      android:saveEnabled="true"/> 

    </LinearLayout> 

    <CheckBox 
     android:id="@+id/someId" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/someString"/> 

</LinearLayout> 

代碼:

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

builder.setView(inflater.inflate(R.layout.dialog_with_spinner, null)) 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int id) { 

       final Spinner sp = (Spinner) findViewById(R.id.spinner); 

       int p = sp.getSelectedItemPosition(); // this gets the **NullPointerException** 

       String[] entryValues = getResources().getStringArray(R.array.entry_values); 
       final String entry = entryValues[p]; 

       useMyEntryMethod(entry); 
      } 
     }) 
     .setNegativeButton(R.string.dialogs_negative, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       // 
      } 
     });  

builder.show(); 

我該如何解決這個問題?謝謝。

+0

試試這個'最後的微調SP =(微調)inflater.findViewById(R.id。微調)' – Raghunandan

+0

不能編譯,如下。方法未定義的類型。 – dentex

回答

1

更換

final Spinner sp = (Spinner) findViewById(R.id.spinner); 

final Spinner sp = (Spinner) dialog.findViewById(R.id.spinner); 

訪問Spinner與對話對findViewById()參考。

更新:

LayoutInflater inflater = getLayoutInflater(); 
View view = inflater.inflate(R.layout.dialog_with_spinner, null); 
setView(view) 

,然後訪問微調使用view一樣,

final Spinner sp = (Spinner) view.findViewById(R.id.spinner);

+0

不能編譯:「方法findViewById(int)未定義類型DialogInterface」... – dentex

+0

@dentex - 看看我更新的答案。 – user370305

+0

謝謝隊友!這絕對有效!無論如何,作爲解釋:這是否是因爲我需要參考膨脹的佈局?我的意思是,一個簡單的'findViewById(...)'引用了警報對話框本身,而不是膨脹的佈局? – dentex