Android 创建自定义对话框时出错
我正在尝试创建一个自定义对话框,其中包含两个微调器“微调月”和“微调年” 为了获得指导,我采用了GoogleDevGuide中提供的示例 主要活动代码: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)
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,我觉得这样会更有效每次你需要的时候创建对话