Страница 1 из 1

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

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

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

Добавлено: 27 ноя 2014, 20:14
Mikhail_dev

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

Добавлено: 27 ноя 2014, 23:38
Foenix
вместо add делай replace :-D

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

Добавлено: 28 ноя 2014, 13:31
Lucifer777
Foenix писал(а):вместо add делай replace :-D
логично, но я именно его и делаю

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

Добавлено: 28 ноя 2014, 13:33
Lucifer777

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

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();
вот так вызываю фрагменты, что ещё нужно знать что бы смогли помочь?

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

Добавлено: 28 ноя 2014, 14:27
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

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

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

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

Добавлено: 30 ноя 2014, 14:29
doter.ua
finberg писал(а):А вопросик : где правильнее "держать" переменную (public static final String) F_SERVICE_INFO фрагмента - в самом класе фрагмента или как у вас в отдельном классе? И так и так будет работать, но все же ...
Если проект большой то в отдельном классе.

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

Добавлено: 30 ноя 2014, 14:33
Mikhail_dev
doter.ua всё верно сказал.

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

Добавлено: 30 ноя 2014, 19:25
Lucifer777
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

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

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

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

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

Добавлено: 01 дек 2014, 09:35
Mikhail_dev
Различного рода константы для фрагментов, диалогов и связанного с 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]