Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 348
1

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

20.05.2017, 18:54. Просмотров 546. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2017, 18:54
Ответы с готовыми решениями:

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

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

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

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

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

8
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
20.05.2017, 20:16 2
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
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 348
20.05.2017, 20:55  [ТС] 3
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
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
21.05.2017, 12:03 4
Если честно, не совсем понятно что значит наслаиваются.
в мэйн активити фоновый фрагмент я вставляю вот так:

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
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 348
21.05.2017, 14:52  [ТС] 5
Наслаиваются в том смысле, что открыть первый фрагмент, например, с TextVew. Далее я открываю второй с REcycler появляется список. Далее открываю опять первый, и поверx предыдущего списка со второго фрагмента я вижу TextVew с первого. Т.е. одновременно я вижу и надпись и список, который могу даже скролить.

Добавлено через 1 час 10 минут
Вроде понял. Не было фона у фрагмента, поэтому через него было видно предыдущий. Я думал после replace старый фрагмент удаляется, а похоже что не так. А можно как то сделать чтобы он удалялся?
0
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 348
25.05.2017, 03:00  [ТС] 6
------------------------------------------------------
И все же почему может так быть: сначало открываю фрагмент просто с TextView. Потом вызываю фрагмент со списком. Потом еще любой фргамент, например тот же с TextView. Вроде фрагмент со списком не виден, но скролить я его могу(так как вижу это в логах) ?
0
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
25.05.2017, 08:56 7
Может быть разметка?
попробуй(те) создать новый фрагмент
Я обычно поэтапно делаю все проверяю по порядку так проще искать.
1
werrt
4 / 4 / 4
Регистрация: 07.02.2008
Сообщений: 348
25.05.2017, 15:01  [ТС] 8
Что то я совсем запутался...
В мейн был 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
Mail-up
30 / 28 / 8
Регистрация: 07.01.2017
Сообщений: 205
25.05.2017, 16:03 9
Вот так
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
25.05.2017, 16:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2017, 16:03

Фрагменты в Android
Здравствуйте, появилась необходимость использования фрагментов, и тут возник...

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

Вложенные фрагменты
Ребятушки, привет. У меня проблема с вложенными фрагментами. Мое приложение...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru