方向更改导致我的应用崩溃

时间:2012-02-21 17:23:07

标签: android

我有一个用于构造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”);

3 个答案:

答案 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"