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

findViewById()에 대한 대화의 참조

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

액세스 Spinner

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

를 교체합니다.

업데이트 :

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

관련 문제