2012-02-21 88 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()。