Intereting Posts
URLConnection getContentLength () возвращает отрицательное значение GCMNetworkManager не запускает PeriodicTask после перезагрузки Получить токен Google Access после аутентификации с использованием Firebase Authentication MultiViewPager + ZoomOutPageTransformer работает неправильно ActionBar с вкладками навигации изменяет высоту с ориентацией экрана Использовать пустой пароль хранилища ключей, который был возможен? Вычислить разницу во времени в Android Какую информацию я могу получить во время телефонного звонка с помощью Android API? OnClickListener не работает для первого элемента в GridView Изменить цвет выбранного элемента списка Чтение сообщений в ящике определенного номера и отображение их в действии Менеджер SDK Неизвестный узел dl-ssl.google.com SetRepeating () AlarmManager повторяет через 1 минуту независимо от того, какое время установлено (5 секунд в этом случае, API 18+) Инструменты ListView: listitem не работает в android studio 2.2 стабильный канал Android отправляет SMS, который отображается в сообщении SMS (без GUI)

После изменения ориентации экрана диалог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 перед вращением, он сразу же появится после поворота.