Фрагменты накладываются друг на друга

Интерфейс, диалоги, темы, стили, меню
Ответить
Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Фрагменты накладываются друг на друга

Сообщение Lucifer777 » 27 ноя 2014, 19:35

Всем привет!
Такая проблема проявляется переодически: фрагменты накладываются друг на друга, т.е. вызвав новый фрагмент он накладывается поверх старого фрагмента. Почему так и как решить данный баг?


Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Фрагменты накладываются друг на друга

Сообщение Foenix » 27 ноя 2014, 23:38

вместо add делай replace :-D
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Фрагменты накладываются друг на друга

Сообщение Lucifer777 » 28 ноя 2014, 13:31

Foenix писал(а):вместо add делай replace :-D
логично, но я именно его и делаю

Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Фрагменты накладываются друг на друга

Сообщение Lucifer777 » 28 ноя 2014, 13:33

Код: Выделить всё

fragment = new myTabs();
        fragmentManager = getFragmentManager();

        fragmentManager.beginTransaction().setCustomAnimations(R.animator.slide_in_left, R.animator.slide_in_right).replace(R.id.container, fragment).addToBackStack(null).commit();
вот так вызываю фрагменты, что ещё нужно знать что бы смогли помочь?

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Фрагменты накладываются друг на друга

Сообщение Mikhail_dev » 28 ноя 2014, 14:27

Скорее всего у вас проблема в том, что вы постоянно создаёте фрагмент. Вы попробуйте его сначала найти.
Вот как делаю я
[syntax=java5]
private void showServiceInfoFragment() {
ServiceInfoFragment serviceInfoFragment = (ServiceInfoFragment)
getSupportFragmentManager().findFragmentByTag(UiUtil.F_SERVICE_INFO);

if (serviceInfoFragment == null) {
serviceInfoFragment = new ServiceInfoFragment();
}

FragmentTransaction editAttrTransaction = getSupportFragmentManager().beginTransaction();
editAttrTransaction.replace(R.id.new_vehicle_container, serviceInfoFragment, UiUtil.F_SERVICE_INFO);
editAttrTransaction.commit();
}
[/syntax]
только заметьте, я добавляю фрагмент с трёмя параметрами, в то время как вы в replace указываете два. В принципе можно и с двумя делать, искав через findFragmentById, но я предпочитаю добавлять и отмечать фрагменты тегами, а потом искать их через findFragmentByTag

finberg
Сообщения: 51
Зарегистрирован: 11 мар 2013, 14:20

Re: Фрагменты накладываются друг на друга

Сообщение finberg » 30 ноя 2014, 13:31

А вопросик : где правильнее "держать" переменную (public static final String) F_SERVICE_INFO фрагмента - в самом класе фрагмента или как у вас в отдельном классе? И так и так будет работать, но все же ...

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Фрагменты накладываются друг на друга

Сообщение doter.ua » 30 ноя 2014, 14:29

finberg писал(а):А вопросик : где правильнее "держать" переменную (public static final String) F_SERVICE_INFO фрагмента - в самом класе фрагмента или как у вас в отдельном классе? И так и так будет работать, но все же ...
Если проект большой то в отдельном классе.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.


Lucifer777
Сообщения: 122
Зарегистрирован: 18 ноя 2013, 17:53

Re: Фрагменты накладываются друг на друга

Сообщение Lucifer777 » 30 ноя 2014, 19:25

Mikhail_dev писал(а):Скорее всего у вас проблема в том, что вы постоянно создаёте фрагмент. Вы попробуйте его сначала найти.
Вот как делаю я
[syntax=java5]
private void showServiceInfoFragment() {
ServiceInfoFragment serviceInfoFragment = (ServiceInfoFragment)
getSupportFragmentManager().findFragmentByTag(UiUtil.F_SERVICE_INFO);

if (serviceInfoFragment == null) {
serviceInfoFragment = new ServiceInfoFragment();
}

FragmentTransaction editAttrTransaction = getSupportFragmentManager().beginTransaction();
editAttrTransaction.replace(R.id.new_vehicle_container, serviceInfoFragment, UiUtil.F_SERVICE_INFO);
editAttrTransaction.commit();
}
[/syntax]
только заметьте, я добавляю фрагмент с трёмя параметрами, в то время как вы в replace указываете два. В принципе можно и с двумя делать, искав через findFragmentById, но я предпочитаю добавлять и отмечать фрагменты тегами, а потом искать их через findFragmentByTag

Спасибо большое за помощь! Вроде так как надо заработало.

finberg
Сообщения: 51
Зарегистрирован: 11 мар 2013, 14:20

Re: Фрагменты накладываются друг на друга

Сообщение finberg » 01 дек 2014, 09:30

Mikhail_dev писал(а):doter.ua всё верно сказал.
Поделитесь опытом, что еще храните в UiUtil кроме тэгов ? Методы, константы.

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Фрагменты накладываются друг на друга

Сообщение Mikhail_dev » 01 дек 2014, 09:35

Различного рода константы для фрагментов, диалогов и связанного с UI. Методы редко там пишу (что может быть и зря), но всё же есть некоторые. Вот например
[syntax=java5]
/**
* Hide a keyboard. For more information about current problem, see
* http://stackoverflow.com/questions/1109 ... ve#tab-top
* @param activity
*/
public static void hideKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
//Find the currently focused view, so we can grab the correct window token from it.
View view = activity.getCurrentFocus();
//If no view currently has focus, create a new one, just so we can grab a window token from it
if(view == null) {
view = new View(activity);
}
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
[/syntax]

Ответить