我有一个用于构造AlertDialog的类,其中包含spinner小部件。当微调器显示其弹出窗口时,如果我改变手机的方向,我的应用程序崩溃,除了说出泄漏的窗口。这个问题之前已经讨论了很多次,但仅限于多线程的背景下。但我有一个主题。那么我做错了什么?
public class ExpenseDialog extends DialogFragment
{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
LayoutInflater factory = LayoutInflater.from(this.getActivity());
View content = factory.inflate(R.layout.expensedialog, null);
Spinner spinner = (Spinner) content.findViewById(R.id.catspinner);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this.getActivity(), R.array.cats, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
return new AlertDialog.Builder(this.getActivity())
.setView(content)
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//some code
}
})
.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
//some code
}
})
.create();
}
}
我显示如下对话框: (new ExpenseDialog())。show(getSupportFragmentManager(),“expensesedialog”);
答案 0 :(得分:1)
有一个与此相关的错误报告:Bug Report
抱歉,我无法帮助您解决问题 - 我遇到了同样的问题。
编辑:评论#7对我有用。它最初没有,因为我使用的是DialogFragment,而应该使用onDestroyView()代替。
答案 1 :(得分:0)
查看Handling Runtime Changes
上的此链接,它将帮助您了解需要针对方向更改执行的操作。当您更改方向时,您的应用会被onDestroy()
销毁并使用onCreate()
重新启动,这可能会导致问题。
http://developer.android.com/guide/topics/resources/runtime-changes.html
答案 2 :(得分:0)
尝试在您显示此对话框的活动的清单文件中添加以下属性...
android:configChanges="keyboardHidden|orientation"