#android #process #background #dialog #alert
#Android #процесс #фон #диалоговое окно #предупреждение
Вопрос:
У меня есть alertdialog с двумя текстами редактирования, и когда пользователь пытается ввести текст в один из текстов редактирования, создается впечатление, что создается новый экземпляр фоновой активности. Как мне предотвратить это?
@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;
}
Комментарии:
1. Вам нужно будет опубликовать код, в котором вы создаете и обрабатываете AlertDialog. Мы не можем дать ответ, основанный только на вашем описании.
2. Вы также используете onpreparredialog ()? Нам нужно увидеть код, в который вы передаете ввод EditText.
3. Я не использую onpreparredialog () и пока не обрабатываю ввод EditText. Я увидел, что фоновая активность запускается, просто выбрав поле EditText.
Ответ №1:
Диалоги создаются асинхронно. Например, при запуске движка
AlertDialog ad = new AlertDialog.Builder(TravelBite.this)
.setView(searchView)
.create();
он генерирует вызов для создания этого и продолжает переходить прямо к Window win = ad.getWindow();
.
Вам нужно будет обработать это с помощью флагов и / или дополнительной логики внутри обработчиков onClick диалогового окна.
Итак, когда вы получите код, созданный для обработки редактируемых текстов и кнопок диалогового окна, вставьте его сюда 🙂
Комментарии:
1. Не могли бы вы уточнить, что должно обрабатываться с помощью flags или внутри onClick? Я отредактировал свой ответ и добавил в XML, содержащий EditTexts и Button, но я не уверен, как код для обработки EditText может помочь остановить воссоздание фоновой активности.
Ответ №2:
Прямо из документации Google для разработчиков Android:
…Когда во время выполнения происходит изменение конфигурации, активность завершается и перезапускается по умолчанию…
Я предполагаю, что это то, что происходит; фоновая активность перезапускается из-за изменения конфигурации устройства (например, ориентации экрана, режимов ввода, размера экрана и т.д.).
В вашем файле манифеста укажите, что как ваша фоновая активность, так и ваша активность 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