Intereting Posts
Метод масштабирования изображения «centercrop» как код Кириллические буквы, не отображаемые в формате PDF, созданные с помощью iText в Android Не удается получить файл конфигурации Google Analytics с официальной страницы Google Как перезагрузить Android-эмулятор и сохранить системные данные Документация Android DSL для gradle Обработка пробелов в logcat Изменение тайм-аута таймера с низкой энергией Bluetooth или очистка потока чтения для более быстрого обнаружения события разъединения Как выровнять центр растрового изображения внутри холста в android? Почему в моем Android GridView есть дополнительные пиксели? Ошибка Android studio 2.0: никаких изменений в развертывании Прослушиватель событий Android для жизненного цикла приложения Как настроить прослушиватель выделенного текста в TextView Как обновить активность после изменения языка (локали) внутри приложения Использование андроидных векторных чертежей Что такое addFooterView для GridView?

После изменения ориентации экрана диалогFragment появляется, по-видимому, без какого-либо вызова

Здесь есть часть Действия, в которой изменяется ориентация экрана:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et = (EditText) findViewById(R.id.editText1); et.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { Fragment1 dialogFragment = new Fragment1(); dialogFragment.show(getFragmentManager(), null); dialogFragment.setTextDialog(et.getText().toString()); return true; } }); } 

По-видимому, кажется, что диалог, который появится внутри диалогового окна диалога, должен появиться сразу после onLongClick над editText (я знаю, что при изменении ориентации экрана активность перезапускается, но она не должна начинаться нормально, как в первый раз, когда она создается? )

Моя проблема: когда я открываю хотя бы один раз диалог и я его закрываю, после изменения ориентации экрана у меня снова появляется диалоговое окно на экране, например, если я долгое время нажимал на editText.

Я не совсем понимаю, почему это происходит.

Я также добавляю структуру фрагмента диалога:

 public Dialog onCreateDialog(Bundle savedInstanceState) { final Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); LayoutInflater adbInflater = LayoutInflater.from(getActivity()); View eulaLayout = adbInflater.inflate(R.layout.dialog_crypt, null); Button btn_OK = (Button) eulaLayout.findViewById(R.id.btnOK); dialog.setContentView(eulaLayout); final EditText et = (EditText)eulaLayout.findViewById(R.id.editText2); et.setText(textDialog); if(et.length()>0) { et.setText(et.getText().toString() + " "); } et.setSelection(et.length()); btn_OK.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { textDialog = et.getText().toString(); ((Main)getActivity()).setTextOnEditText(textDialog); dialog.dismiss(); } }); return dialog; } 

Большое спасибо за помощь.

Solutions Collecting From Web of "После изменения ориентации экрана диалогFragment появляется, по-видимому, без какого-либо вызова"

Попробуйте удалить диалог из стека с помощью диспетчера фрагментов вместо того, чтобы просто отклонить его.

getFragmentManager().beginTransaction().remove(dialogFragment.this).commit();

Кстати, вместо того, чтобы просто использовать Fragment для вашего диалога, вы должны использовать сам DialogFragment . Оформить заказ: DialogFragment

Кроме того, никогда не называйте свои методы активности такими ( ((Main)getActivity()).setTextOnEditText(textDialog); если только ваш фрагмент не является статическим внутренним классом. Вместо этого создайте interface для разговора между фрагментами и активностью.

Когда экран изменяет ориентацию, он вызывает методSaveInstanceState и сохраняет состояние в объекте Bundle, включая стек. Если вы отпустите диалог, не очистив этот стек, он отобразит диалоговое окно при повороте телефона, поскольку оно находится в пакете saveInstanceState.

Вы должны очистить диалог от стека с помощью:

 getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit(); 

Если вы используете библиотеку поддержки для фрагмента диалога или

 getActivity().getFragmentManager().beginTransaction().remove(this).commit(); 

Когда происходит изменение конфигурации (например, вращение), старый фрагмент не разрушается – он просто добавляет себя обратно в Activity, когда он воссоздан (андроид по-прежнему сохраняет фрагменты). Поэтому, если вы показываете свой DialogFragment перед вращением, он сразу же появится после поворота.