Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/18: Рейтинг темы: голосов - 18, средняя оценка - 5.00
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361

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

20.05.2017, 18:54. Показов 3915. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Не пойму почему фрагменты наслаиваются друг на друга
В main активити в onCreate включается первый фрагмент, чтобы чтото было при открытии приложения:
Java
1
2
3
4
5
6
7
8
9
        loginFragment = new LoginFragment(); 
        friendsFragment = new FriendsFragment();   // здесь RecycledView
        messagesFragment = new MessagesFragment(); // здесь просто поле с надписью
 
              FragmentTransaction fg = getFragmentManager().beginTransaction();
               fg.replace(R.id.fragment_container, messagesFragment);
               fg.commit();
 
        }
далее в Drawer меняю фрагменты, но они наслаиваются:
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
  @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
 
        FragmentTransaction fg = getFragmentManager().beginTransaction();
 
        switch (item.getItemId()) {
             case R.id.nav_friend:
                fg.replace(R.id.fragment_container, friendsFragment);
                fg.commit();
                break;
 
            case R.id.nav_messages:
                fg.replace(R.id.fragment_container, messagesFragment);
                fg.commit();
                break;
 
        }
 
 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.05.2017, 18:54
Ответы с готовыми решениями:

Все наслаивается друг на друга
Здравствуйте, Старая проблема, в превью всё выглядит красиво, а как запущу - все элементы интерфейса, кнопки - все куда-то улетают в...

Наложение изображений друг на друга
Здравствуйте. Задача такова. В приложение загружается произвольное изображение из галереи пользователя. На него накладывается...

Компоненты налезают друг на друга
По старой дельфийской привычке бодро покидал на форму компонентов (Button, ToggleButton, CheckedTextView и проч.). На превью смотрится всё...

8
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
20.05.2017, 20:16
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
34
35
 @SuppressWarnings("StatementWithEmptyBody")
    @Override
 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
 
        int id = item.getItemId();
        Fragment fragment = null;
        Class fragmentClass = null;
        //    ft.commit();
        if (id == R.id.bus) {
            fragmentClass = Fragment_1.class;
        } else if (id == R.id.taxi) {
            fragmentClass = Fragment_t2.class;
        } else
        }else;
 
        try {
            assert fragmentClass != null;
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        // Вставляем фрагмент, заменяя текущий фрагмент
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
        // Выделяем выбранный пункт меню в шторке
        item.setChecked(true);
        // Выводим выбранный пункт в заголовке
        setTitle(item.getTitle());
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
 
        return true;
    }
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
20.05.2017, 20:55  [ТС]
Mail-up, красиво. У меня только фрагменты наследуются от android.app.Fragment. Попробовал и и через android.support.v4.app.Fragment. Это вообще принципиально?
у меня похоже какая-то проблема с адаптером для Recycler, в консоле при вызове фрагмента постоянно:
Java
1
E/RecyclerView: No adapter attached; skipping layout
хотя содержимое отображается, новидно из-за этой ошибка и не до конца фрагменты замещаются:

адаптер:
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
34
35
36
37
public class FriendsAdapter extends RecyclerView.Adapter<FriendsAdapter.FriendsHolder> {
    private VKUsersArray friendList;
 
    public FriendsAdapter(VKUsersArray friendList) {
        this.friendList = friendList;
    }
 
 
    @Override
    public FriendsHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_item, parent, false);
        return new FriendsHolder(view);
    }
 
    @Override
    public void onBindViewHolder( FriendsHolder holder, int position) {
      
        holder.name.setText(String.valueOf(friendList.get(position).first_name));
    
    }
 
    @Override
    public int getItemCount() {
 
        return friendList.size();
    }
 
    public static class FriendsHolder extends RecyclerView.ViewHolder {
        protected TextView name;
    
        public FriendsHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.card_item_friend_name);
        
        }
    }
}
и собственно сам фрагмент:

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
34
35
36
37
38
39
public class FriendsFragment extends Fragment {
    RecyclerView recyclerView;
 
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
      
    }
 
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        VKRequest vkRequest = VKApi.friends().get(VKParameters.from(VKApiConst.FIELDS,"photo_50"));
 // запрос по API в контактете
        vkRequest.useSystemLanguage=true;
 
        vkRequest.executeWithListener(new VKRequest.VKRequestListener() {
            @Override
            public void onComplete(VKResponse response) {
                super.onComplete(response);
                VKUsersArray o = (VKUsersArray) response.parsedModel; // получаю лист
                FriendsAdapter friendsAdapter = new FriendsAdapter(o); //передаю лист с юзерами в адаптер
                recyclerView.setAdapter(friendsAdapter);    // ставлю recycler адаптер
            }
        });
 
    }
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_friends, container, true);  
        recyclerView = (RecyclerView) root.findViewById(R.id.fragment_friends_recycled); // получаю Recycler
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setLayoutManager(layoutManager);
         return inflater.inflate(R.layout.fragment_friends, null);
    }
}
0
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
21.05.2017, 12:03
Если честно, не совсем понятно что значит наслаиваются.
в мэйн активити фоновый фрагмент я вставляю вот так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
  //ТУТ ВСТАВЛЯЕМ ФОНОВЫЙ ФРАГМЕНТ
        if (savedInstanceState == null) {
            Fragment fragment = null;
            Class fragmentClass = null;
            fragmentClass = Fragment_taxi_0.class;
            try {
                fragment = (Fragment) fragmentClass.newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction().replace(R.id.container22, fragment).commit();
        }
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
21.05.2017, 14:52  [ТС]
Наслаиваются в том смысле, что открыть первый фрагмент, например, с TextVew. Далее я открываю второй с REcycler появляется список. Далее открываю опять первый, и поверx предыдущего списка со второго фрагмента я вижу TextVew с первого. Т.е. одновременно я вижу и надпись и список, который могу даже скролить.

Добавлено через 1 час 10 минут
Вроде понял. Не было фона у фрагмента, поэтому через него было видно предыдущий. Я думал после replace старый фрагмент удаляется, а похоже что не так. А можно как то сделать чтобы он удалялся?
0
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
25.05.2017, 03:00  [ТС]
------------------------------------------------------
И все же почему может так быть: сначало открываю фрагмент просто с TextView. Потом вызываю фрагмент со списком. Потом еще любой фргамент, например тот же с TextView. Вроде фрагмент со списком не виден, но скролить я его могу(так как вижу это в логах) ?
0
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
25.05.2017, 08:56
Может быть разметка?
попробуй(те) создать новый фрагмент
Я обычно поэтапно делаю все проверяю по порядку так проще искать.
1
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 361
25.05.2017, 15:01  [ТС]
Что то я совсем запутался...
В мейн был FrameLayout, который был контейнером для фрагментов. Убрал его, стал добавлять просто в мейн- проблема с перекрытие и наслаиванием вроде ушла.

При создании фрагмента в onCreateView нужно определить элемент RecyclerView, который есть у фрагмента, поэтому нужно
Java
1
2
  View root = inflater.inflate(R.layout.fragment_friends, container, false);
  recyclerView = (RecyclerView) root.findViewById(R.id.fragment_friends_recycled);
а возвращать из onCreateView нужно этот root
или просто:
Java
1
 inflater.inflate(R.layout.fragment_friends, null);
?

Добавлено через 2 минуты
и где нужно логику во фрагменте помещать(адаптеры для его элементов, листенеры)? пока все в onCreateView пишу?
0
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
25.05.2017, 16:03
Вот так
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tab_1, container, false);


return view;
}

ресайкл и адаптеры тоже в он create View но список создаешь в onCreate
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2017, 16:03
Помогаю со студенческими работами здесь

Как избежать наложения друг на друга textview
Есть такой layout &lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; &lt;LinearLayout...

Не загружаются данные в Firebase отдельно друг от друга
Подскажите в чем проблема. Есть 2 EditText и ImageView. Если заполнить все поля и выбрать изображение, то данные загружаются без проблем....

Контейнеры наслаиваются друг на друга при изменении ширины браузера
Здравствуйте, начал изучать css и html, пробую создать сайт, но сталкнулся с такой проблемой: при изменении ширины браузера до минимальной,...

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
&lt;?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла yoo.txt'; } while (false !== ($char =...

Тестируем друг-друга
Тестируем друг-друга. Столкнулся с тем что куча людей называют себя программистами - являясь дизайнерами, в лучшем случае. ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru