2017-02-02 18 views
0

2つのスピナー(spinner_monthspinner_year)でカスタムダイアログボックスを作成しようとしています。カスタムダイアログを作成中にエラーが発生しました

Googleのガイドで提供されているサンプルを参考にしました。

MainActivityコード:

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setView(R.layout.calender_view); 
AlertDialog alertDialog = builder.create(); 
Spinner spinner = (Spinner) alertDialog.findViewById(R.id.spinner_month); 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.months_array,  android.R.layout.simple_spinner_item); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinner.setAdapter(adapter); 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:app="http://schemas.android.com/apk/res-auto" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:id="@+id/layout_category" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:orientation="horizontal" 
      android:padding="5dp"> 

    <Spinner 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/spinner_year" 
     android:layout_weight="1"/> 

    <Spinner 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/spinner_month" 
     android:layout_weight="1" 
     android:spinnerMode="dialog"/> 
</LinearLayout> 

私はそれを実行すると、私は次のエラーを取得する次のように私のcalender_view.xmlがある:

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method void android.widget.Spinner.setAdapter(android.widget.SpinnerAdapter) on a null object reference

ので、「これはですが、スピナーのオブジェクトはnullですが、私はなぜそれがわかりません。私が紛失しているものはありますか?

答えて

1

はこの1つの

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    LayoutInflater li = LayoutInflater.from(this); 
    View view = li.inflate(R.layout.calender_view, null, false); 
    builder.setView(view); 
    AlertDialog alertDialog = builder.create(); 

    Spinner spinner = (Spinner) view.findViewById(R.id.spinner_month); 
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.months_array,  android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 
+0

この答えは、すべてのコードで試してみてください。なぜこの答えが問題を解決するのかについていくつかの説明を追加することを検討してください。 – RedBassett

+0

を提案通りに - 私はLayoutInflaterを追加してから、 'calender_view'を膨らませて、同じものをアダプタに割り当てました。 これは完璧に機能しました! – Vivek

+0

初めて 'builder.show'を呼び出すとうまくいきます。それ以降の呼び出しは 'java.lang.IllegalStateExceptionで失敗する:指定された子は既に親を持っている' だから私は 'onCreate()の間に作成できるものではなく、 'を呼び出し、単にbuilder.show()を呼び出すとより効率的になります – Vivek

関連する問題