2011-04-26 87 views
1

我有一個alertdialog有兩個編輯文本,當用戶試圖輸入文本到其中一個編輯文本時,一個新的背景活動實例似乎被創建。我如何阻止這種情況發生?如何阻止後臺活動運行時提醒對話框在運行android

@Override 
public boolean onSearchRequested() { 
    showDialog(DIALOG_SEARCH_ID); 

    return false; 
} 

protected Dialog onCreateDialog(int id) { 
    switch(id) { 
    case DIALOG_SEARCH_ID: 
     LayoutInflater factory = LayoutInflater.from(this); 
     final View searchView = factory.inflate(R.layout.searchbar2, null); 
     AlertDialog ad = new AlertDialog.Builder(TravelBite.this) 
      .setView(searchView) 
      .create(); 
     Window win = ad.getWindow(); 
     win.setGravity(48); 
     return ad; 
    } 
    return null; 
} 
+0

你需要上傳你創建和處理AlertDialog那裏的代碼。我們無法僅根據您的描述給出答案。 – Squonk 2011-04-26 18:56:57

+0

你也使用onPrepareDialog()嗎?我們需要查看您處理EditText輸入的代碼。 – Maximus 2011-04-26 19:02:55

+0

我沒有使用onPrepareDialog(),也沒有處理EditText輸入。我從選擇EditText框中看到後臺活動正在運行。 – Yvonne 2011-04-26 19:05:22

回答

0

對話框是異步創建的。如,當發動機命中

AlertDialog ad = new AlertDialog.Builder(TravelBite.this) 
      .setView(searchView) 
      .create(); 

它產生的呼叫來創建,並不斷去直接Window win = ad.getWindow();

您需要通過對話框的onClick處理程序中的標誌和/或更多邏輯來處理它。

所以,當你EGT處理對話框的edittexts和按鈕內置的代碼,粘貼到此處:)

+0

你能否澄清一下需要通過標誌或onClick處理的內容?我編輯了我的答案,並添加了包含EditTexts和Button的XML,但我不確定處理EditText的代碼如何幫助停止重新創建後臺活動。 – Yvonne 2011-04-26 20:33:36

0

直從谷歌的Android開發者文檔:

...當配置變化發生在運行時,活動關閉 關閉並默認重新啓動...

我假設這是發生了什麼;由於設備配置更改(如屏幕方向,輸入模式,屏幕大小等),背景活動正在重新啓動。

在你的manifest文件,聲明,無論你的背景情況和您的AlertDialog活動處理的配置變化,即:

<activity android:name=".MyActivity" 
      android:configChanges="locale|navigation|orientation" 
      android:label="@string/app_name"> 

您可以根據自己的情況更改屬性爲android:configChanges

看看Android的文檔,看看你需要的屬性: http://developer.android.com/guide/topics/manifest/activity-element.html#config