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

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

Войти
Регистрация
Восстановить пароль
 
NOSC
43 / 43 / 3
Регистрация: 10.10.2013
Сообщений: 297
#1

Drawer от гугл + fragment - Android

31.01.2014, 15:46. Просмотров 740. Ответов 0
Метки нет (Все метки)

Всем привет!
Делаю программу с Drawer.
Все сделал как написано в доках http://developer.android.com/intl/ru...av-drawer.html

ПРосмотрел пример прриложения от туда же.

Но в приложении переключаются картинки. На сколько я понял, я могу в rootView вместо картинок подставлять фрагменты, но не могу разобраться как это сделать.

Как мне показалось, надо в коде:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private class DrawerItemClickListener implements ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            selectItem(position);
        }
    }
 
    private void selectItem(int position) {
        // update the main content by replacing fragments
        Fragment fragment = new PlanetFragment();
        Bundle args = new Bundle();
        args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
        fragment.setArguments(args);
 
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
 
        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        setTitle(mPlanetTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    }
указать ему что открывается fragment а не рисунок.

Подскажите путь что именно поправить и как ему сказать чтобы он в rootView показал нужный фрагмент

Спасибо большое

Добавлено через 45 минут
Собственно у меня сейчас вот так выглядит:
Java
1
2
3
4
5
6
7
8
9
10
11
        private class DrawerItemClickListener implements ListView.OnItemClickListener {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                selectItem(position);
                if (position == 0) {
                    fTrans = getFragmentManager().beginTransaction();
                    fTrans.add(R.id.content_frame, calc);
                    fTrans.commit();
                }
            }
        }
При этом при выборе position==0 ничего не меняется, но транзакция судя по всему проходит, потому что если я опять кликаю по position==0 - программа закрывается с ошибкой:
Fragment already added

Добавлено через 6 часов 48 минут
Собственно докапался вот до такого кода в MainActivity:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static class PlanetFragment extends Fragment {
        public static final String ARG_PLANET_NUMBER = "planet_number";
 
        public PlanetFragment() {
            // Empty constructor required for fragment subclasses
        }
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment, container, false);
            int i = getArguments().getInt(ARG_PLANET_NUMBER);
            String planet = getResources().getStringArray(R.array.menu_array)[i];
 
            int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
                            "drawable", getActivity().getPackageName());
            ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
            getActivity().setTitle(planet);
            return rootView;
        }
    }


В нем определяется новый фрагмент в xml файле fragment.xml :
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:gravity="center"
    android:padding="32dp" />


Прав ли я, что мне надо поменять в файле fragment ImageView на Fragment и в классе PlanetFragment я должен определять fragment а не image ???

Если не сложно, подскажите кодом как это сделать. Если надо выложу весь проект. А то в гугле все показывают гугловый сэмпл с картинками и все.

Спасибо

Добавлено через 1 час 26 минут
Проблема решилась следующим образом:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment, container, false);
            int i = getArguments().getInt(ARG_PLANET_NUMBER);
            String planet = getResources().getStringArray(R.array.menu_array)[i];
 
            if (i == 0) {
                fragment = new Calc();
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
            } {
                 //и так далее
}
            getActivity().setTitle(planet);
            return rootView;
        }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2014, 15:46     Drawer от гугл + fragment
Посмотрите здесь:

Android Drawer и ActionBarCompat на Android 2.2+
Drawer Layout Android
Android Обновление fragment из другого fragment
Navigation Drawer Android
Navigation Drawer Android
Android Запретить открытие Drawer
Android Material Drawer
Navigation drawer Android
Android Navigation drawer
Android Navigation Drawer
Android Добавление navigation drawer
Android Drawer Navigation and MenuItem

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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