проблема ориентации диалогов Android - PullRequest
0 голосов
/ 03 марта 2011

Привет, я новый разработчик на Android. Я написал код для отображения простого диалогового окна, в этом диалоговом окне я выбрал режим редактирования текста. Когда я ввел текст для редактирования текста, я изменил ориентацию экрана, затем изменил значение редактируемого текста.не появляется!

Я написал следующий код

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(); 

Пожалуйста, кто-нибудь может решить эту проблему?

Ответы [ 3 ]

1 голос
/ 03 марта 2011

prasad ... Поле editText не имеет идентификатора, и если элемент представления не имеет идентификатора, состояние просмотра автоматически не сохраняется при программном уничтожении, когда пользователь меняет ориентацию телефона. Возможно, лучше создать пользовательский диалог с использованием макета XML, тогда текстовое поле для редактирования должно иметь и идентификатор, и состояние просмотра должны автоматически сохраняться при мягком уничтожении.

JAL

У меня есть код здесь .

Редактировать: код прототипа, взятый из Android Docs, который едва работает, потому что у меня нет времени работать над этим. Создайте макет XML в res / layout как 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>

А затем используйте этот макет для создания оповещения:

    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();

Поскольку поле editText имеет идентификатор, оно, похоже, сохраняет состояние при мягком уничтожении.

1 голос
/ 03 марта 2011

По сути, это включает переопределение метода onRetainNonConfigurationInstance.См. Здесь: Более быстрое изменение ориентации экрана

Выдержка:

"У класса Activity есть специальный метод onRetainNonConfigurationInstance (). Этот метод можно использовать для передачиПроизвольный объект, которым вы обладаете в будущем, и Android достаточно умен, чтобы вызывать этот метод только при необходимости. В случае с Photostream приложение использовало этот метод для передачи загруженных изображений в будущее действие при изменении ориентации. "

0 голосов
/ 06 февраля 2012

Этот вопрос старый, но все же стоит дать более простой ответ. JAL упоминает о необходимости установить идентификатор, но вы можете пойти дальше и сделать это прямо в 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 создайте новый XML-файл с именем ids.xml. Там определите этот идентификатор, который мы используем в 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 должна сохранять / восстанавливать представления, для которых определен идентификатор. Вся XML-часть вышесказанного аккуратна, но на самом деле не нужна. Вы можете просто вставить готовое целое число в вызов Java View.setId(), чтобы исправить это в одну строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...