Intereting Posts
Установка textColor с темы не работает только на HTC Desire HD Как включить удаленный отладчик / инспектор WebKit приложения Android с помощью WebView? AccountManager возвращает пустые учетные записи Android миллисекунды Поддержка Android-v7 CardView: текстовое изображение заголовка с другим цветом фона не распространяется до тех пор, пока края Можно ли отправить сообщение через GTalk Intent? TabLayout отсутствует после обновления библиотеки поддержки дизайна Кнопка Android Studio Run ничего не делает StableArrayAdapter vs ArrayAdapter Почему TextView.setTypeface () преувеличенно увеличивает мою высоту TextView, когда я использую шрифт Roboto-Italic.ttf? Разный размер Drawable при загрузке в качестве фона из / drawable-hdpi вместо / drawable Как выделить кнопку при нажатии? Java.lang.IllegalStateException: Не удалось прочитать строку x col x из CursorWindow. Убедитесь, что курсор инициализирован правильно. Контакты Android JUnit тестирование ClassNotFoundException Разница между findViewById (R.id.content) и getRootView ()

После изменения ориентации экрана диалог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; } 

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

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

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