2011-03-03 72 views
0

嗨,我是Android上的新開發者我已經編寫了代碼來顯示簡單的對話框,在這個對話框中我已經編輯文本view.when我在編輯文本上輸入文本,然後我改變了方向的碎片然後編輯文本的值沒有出現!安卓對話框方向問題

我寫的代碼如下

AlertDialog.Builder alert = new AlertDialog.Builder(this); 

alert.setTitle("Title"); 
alert.setMessage("Message"); 

// Set an EditText view to get user input 
final EditText input = new EditText(this); 
alert.setView(input); 

alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
public void onClick(DialogInterface dialog, int whichButton) { 
    String value = input.getText(); 
    // Do something with value! 
    } 
}); 

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
    // Canceled. 
    } 
}); 

alert.show(); 

請任何一個能解決這個問題?

回答

1

基本上,這涉及覆蓋onRetainNonConfigurationInstance方法。 在這裏看到: Faster Screen Orientation Change

摘錄:

「活動類有一個名爲 onRetainNonConfigurationInstance特殊 方法() 此方法可用於傳遞一個 任意對象的未來的自己和 。 Android足夠聰明,僅在需要時才調用此方法 Photostream的情況下,應用程序使用 此方法通過下載的 圖像到未來活動 方向更改。「

1

prasad ... editText框沒有ID,如果view元素沒有ID,當用戶改變手機的方向時,視圖狀態不會自動保存在soft kill上。使用XML佈局創建自定義對話框可能會更好,然後編輯文本框應該具有ID和視圖狀態應該自動保存在軟件中。

JAL

我有一些代碼here

編輯:從Android文檔取得的原型代碼幾乎沒有工作,因爲我沒有時間去處理這個問題。創建資源作爲alert_dialog_text_entry.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
<EditText android:text="Stateful" 
android:id="@+id/EditText01" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</EditText> 
</LinearLayout> 

一個XML佈局/佈局,然後使用此佈局創建警報:由於EDITTEXT箱具有它似乎節省的狀態的ID

AlertDialog.Builder builder= new AlertDialog.Builder(this); 
    LayoutInflater inflater= getLayoutInflater(); 
    final View myView= inflater.inflate(R.layout.alert_dialog_text_entry, null); 
    builder.setTitle("About"); 
    builder.setMessage(alertMessage+"Version: "+versionName); 
    builder.setView(myView); 
    AlertDialog alert= builder.create(); 

軟殺。

+0

謝謝你,但有沒有這樣的機會 – 2011-03-04 07:32:08

+0

@prasad蓋好吧我會添加原型「它幾乎沒有工作」的代碼,讓你開始 – JAL 2011-03-04 20:41:55

0

這個問題很古老,但它仍然值得給出一個更簡單的答案。 JAL提到需要設置ID,但您可以直接在Java中執行該操作。例如,添加這個新行成以上的原代碼:

// Set an EditText view to get user input 
final EditText input = new EditText(this); 
// Id the EditText so the framework will save/restore it for us 
input.setId(R.id.my_id_for_alert_box_inputs); // <-------- New line 
alert.setView(input); 

/res/values創建一個名爲ids.xml一個新的XML文件。在那裏,定義這個ID,我們在Java使用:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Integer IDs used for tagging Views made in Java programmatically 
    without clashing with XML-defined views. --> 
<resources> 
    <!-- Used to id the input box in a dialog. Reused in different dialogs. --> 
    <item type="id" name="my_id_for_alert_box_inputs" /> 
</resources> 

這工作,因爲Android應用程序框架應該保存/恢復已定義的ID意見。上述的整個XML部分是簡潔而不是真正需要的。您可以將構成的整數插入到Java View.setId()調用中,以使其成爲單行修補程序。