2012-02-21 94 views
2

我有一个构建包含微调控件的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(); 
} 

}

我表明这样的对话: (新ExpenseDialog())显示(getSupportFragmentManager(), “expensedialog”);

+1

发布您的logcat! – 2012-02-21 17:24:50

+0

这是非常大的,但它在beginnig说:活动andrey_it.expensetracker.MainActivity已泄露窗口[email protected]最初在这里添加 02-21 19:39:56.174: E/WindowManager(19094):android.view.WindowLeaked:Activity andrey_it.expensetracker.MainActivity泄露了窗口[email protected]最初在这里添加 – 2012-02-21 17:40:29

+0

从我读过的内容接缝给我,我明白是什么原因造成的错误:在活动重新开始后,我的弹出框恰好与先前不再存在的活动相关联。但我能做什么呢? – 2012-02-21 17:43:59

回答

0

尝试添加以下属性,从正在显示该对话框的活动清单文件......

android:configChanges="keyboardHidden|orientation" 
+0

这个选项经常被滥用,不应该代替不做你的代码作业。他必须修复漏窗,而不是覆盖配置更改。 – davidcesarino 2012-03-15 21:24:16

1

有与此相关的一个bug报告:Bug Report

对不起,我无法帮助你解决它---我患有同样的问题。

编辑:评论#7为我工作。它最初并不是因为我使用的是DialogFragment,而是应该使用onDestroyView()。