Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,592
Записей в блоге: 2
#1

Фрагмент поверх другого - Android

29.06.2016, 12:04. Просмотров 389. Ответов 7
Метки нет (Все метки)

Меняю фрагменты след. кодом:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public void fragmentChange(int id, boolean addToBackStack){
        FragmentTransaction fTrans = getSupportFragmentManager().beginTransaction();
        switch (id){
            case Constants.PEOPLE_NEAR_DRAWER_ID:
                fTrans.replace(R.id.frgmCont, new PeopleNear(), Constants.PEOPLE_NEAR_FRAGMENT_TAG);
                if (addToBackStack) fTrans.addToBackStack(Constants.PEOPLE_NEAR_FRAGMENT_TAG);
                fTrans.commit();
                break;
            case Constants.FRIEND_DRAWER_ID:
                fTrans.replace(R.id.frgmCont, new PeopleList(), Constants.PEOPLE_LIST_FRAGMENT_TAG);
                if (addToBackStack) fTrans.addToBackStack(Constants.PEOPLE_LIST_FRAGMENT_TAG);
                fTrans.commit();
                break;
            case Constants.SETTINGS_DRAWER_ID:
                fTrans.replace(R.id.frgmCont, new Settings(), Constants.SETTINGS_FRAGMENT_TAG);
                if (addToBackStack) fTrans.addToBackStack(Constants.SETTINGS_FRAGMENT_TAG);
                fTrans.commit();
                break;
            case Constants.SETTINGS_PROFILE_DRAWER_ID:
                fTrans.replace(R.id.frgmCont, new SettingsProfile(), Constants.SETTINGS_PROFILE_FRAGMENT_TAG);
                if (addToBackStack) fTrans.addToBackStack(Constants.SETTINGS_PROFILE_FRAGMENT_TAG);
                fTrans.commit();
                break;
            case Constants.CHAT_LIST_DRAWER_ID:
                fTrans.replace(R.id.frgmCont, new ChatList(), Constants.CHAT_LIST_FRAGMENT_TAG);
                if (addToBackStack) fTrans.addToBackStack(Constants.CHAT_LIST_FRAGMENT_TAG);
                fTrans.commit();
                break;
            case Constants.DIALOG_EXIT_ID:
                System.exit(0);
                break;
        }
    }



Иногда бывает так что один фрагмент встает на другой .. Вроде и делаю replace, а не add.
И я понять не могу какая там закономерность... Не могу сам сымитировать, всегда получается хз после каких действий.. То при восстановлении приложение из свернутого состояния то при смене фрагментов..

У вас бывало такое? Что за бяка? Как исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,592
Записей в блоге: 2
07.07.2016, 10:27  [ТС]     Фрагмент поверх другого #2
Когда делаю addToBackStack и потом обратно по нажатию кнопки "назад" возвращаюсь назад то происходит наложение.. Что это?) Как исправить?
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,215
Завершенные тесты: 1
07.07.2016, 11:05     Фрагмент поверх другого #3
где находится этот метод?
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,592
Записей в блоге: 2
07.07.2016, 11:14  [ТС]     Фрагмент поверх другого #4
Цитата Сообщение от Паблито Посмотреть сообщение
где находится этот метод?

Я addToBackStack делаю только в двух местах:

Метод находиться в MainActivity, вызывается и с MainActivity и с Фрагментов
Java
1
((MainActivity) getActivity()).fragmentChange(Constants.SETTINGS_PROFILE_DRAWER_ID, true);

Есть один адаптер в котором тоже меняю фрагмент:
Java
1
2
3
4
5
6
7
8
if (ctx instanceof MainActivity){
                Log.d("tyuyt", "ctx instanceof MainActivity)");
                FragmentTransaction fTrans = ((MainActivity) ctx).getSupportFragmentManager().beginTransaction();
                MessageList messageList = new MessageList().newInstance(chatList.get(Position).address_his,   chatList.get(Position).address_title);
                fTrans.replace(R.id.frgmCont, messageList, Constants.MESSAGE_LIST_FRAGMENT_TAG);
                fTrans.addToBackStack(Constants.MESSAGE_LIST_FRAGMENT_TAG);
                fTrans.commit();
            }
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,215
Завершенные тесты: 1
07.07.2016, 11:15     Фрагмент поверх другого #5
я про этот fragmentChange
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,592
Записей в блоге: 2
07.07.2016, 11:16  [ТС]     Фрагмент поверх другого #6
Паблито, Метод находиться в MainActivity
Паблито
2014 / 1756 / 546
Регистрация: 12.05.2014
Сообщений: 6,215
Завершенные тесты: 1
07.07.2016, 11:19     Фрагмент поверх другого #7
для начала

в активити находТСЯ фрагмент и в него потом добавляюТСЯ другие?
если так то у фрагментов есть свой метод getChildFragmentManager()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2016, 11:50     Фрагмент поверх другого
Еще ссылки по теме:

Android Как сделать RelativeLayout поверх другого?
Как закрыть фрагмент? Android
Как закрыть фрагмент Android
Вернуться во фрагмент с данными? Android
Android Фрагмент сжимается в активити

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ILNAR_93
Android
217 / 217 / 21
Регистрация: 19.01.2013
Сообщений: 1,592
Записей в блоге: 2
07.07.2016, 11:50  [ТС]     Фрагмент поверх другого #8
Цитата Сообщение от Паблито Посмотреть сообщение
для начала
спасибо

Буду знать
Цитата Сообщение от Паблито Посмотреть сообщение
в активити находТСЯ фрагмент и в него потом добавляюТСЯ другие?
Да.

Цитата Сообщение от Паблито Посмотреть сообщение
если так то у фрагментов есть свой метод getChildFragmentManager()
Что я с этим должен делать? при нажатии Back стирать ChildFragment?

Добавлено через 4 минуты
Цитата Сообщение от ILNAR_93 Посмотреть сообщение
в активити находТСЯ фрагмент и в него потом добавляюТСЯ другие?
При запуске приложения фрагмента нет. есть только контейнер для фрагментов

Добавлено через 12 минут
Паблито,

Сделал так: Если переход происходит по нажатию кнопки в дравер меню то очищаю стек
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void clearStack(){
        try {
            FragmentManager fragmentManager = getSupportFragmentManager();
            if (fragmentManager == null) return;
            int count = fragmentManager.getBackStackEntryCount();
            while (count > 0) {
                fragmentManager.popBackStack();
                count--;
            }
        } catch (NullPointerException ex){
            ex.printStackTrace();
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }
Yandex
Объявления
07.07.2016, 11:50     Фрагмент поверх другого
Ответ Создать тему
Опции темы

Текущее время: 06:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru