Android 创建自定义对话框时出错

Android 创建自定义对话框时出错,android,android-dialog,Android,Android Dialog,我正在尝试创建一个自定义对话框,其中包含两个微调器“微调月”和“微调年” 为了获得指导,我采用了GoogleDevGuide中提供的示例 主要活动代码: AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setView(R.layout.calender_view); AlertDialog alertDialog = builder.create(); Spinner spinner = (Spinner)

我正在尝试创建一个自定义对话框,其中包含两个微调器“微调月”和“微调年”

为了获得指导,我采用了GoogleDevGuide中提供的示例

主要活动代码:

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);
我的Calendar_view.xml如下所示

<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>
当我运行它时,我得到以下错误:

原因:java.lang.NullPointerException:尝试调用虚拟机 方法无效 上的android.widget.Spinner.setAdapterandroid.widget.SpinnerAdapter 空对象引用

这是因为“微调器”对象为空,但我不知道为什么。有什么我遗漏的吗?

试试这个

    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);

这个答案全是密码。请考虑添加一些关于这个答案为什么会解决问题的描述。根据这个建议,我添加了LayOutButter,然后夸大了CalnDelphi视图,并把它分配给适配器,它工作得很好。当我第一次调用builder.show时,它工作得很好。但是后续调用失败,java.lang.IllegalStateException:指定的子级已经有父级,因此我的假设是否正确,即每次需要时都需要创建对话框,而不是在onCreate期间创建的东西,只需调用builder.show,我觉得这样会更有效每次你需要的时候创建对话