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

Общий Navigation Drawer для нескольких окон

24.01.2017, 12:45. Показов 3706. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем,
как можно переключаться между окнами имея один общий Navigation Drawer и не используя фрагменты ?

Android Studio 2.2.3
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.01.2017, 12:45
Ответы с готовыми решениями:

Создание окон в navigation drawer activity
Ребят, всем привет. Пытаюсь создать фрагменты в navigation drawer activity, но не могу сделать переключение между ними. В чем ошибка? В...

Navigation Drawer
помогите найти ошибку. код главного активити package ua.com.cls; import android.annotation.SuppressLint; import...

Navigation Drawer
Пытаюсь разобраться с Navigation Drawer. Делаю по гайду https://github.com/codepath/android_guides/wiki/Fragment-Navigation-Drawer и в...

14
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
24.01.2017, 12:49
Цитата Сообщение от BatyrbekAl Посмотреть сообщение
не используя фрагменты
а что использовать?
1
66 / 56 / 6
Регистрация: 28.12.2011
Сообщений: 322
24.01.2017, 12:53
Цитата Сообщение от BatyrbekAl
не используя фрагменты
а у меня вопрос - почему?
1
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
24.01.2017, 12:58  [ТС]
Цитата Сообщение от Hank Посмотреть сообщение
а у меня вопрос - почему?
Чтобы выглядело лучше и ещё кнопка назад в верхнем левом углу чтобы вернуться назад, и свое меню окна в правом верхнем углу.
0
66 / 56 / 6
Регистрация: 28.12.2011
Сообщений: 322
24.01.2017, 13:05
Цитата Сообщение от BatyrbekAl Посмотреть сообщение
Чтобы выглядело лучше
лучше в чем?

Цитата Сообщение от BatyrbekAl Посмотреть сообщение
в верхнем левом углу чтобы вернуться назад, и свое меню окна в правом верхнем углу.
что мешает это реализовать применяя фрагменты?
1
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
24.01.2017, 13:20  [ТС]
Цитата Сообщение от Hank Посмотреть сообщение
что мешает это реализовать применяя фрагменты?
Допустим я зашел в товар просмотрел и хочу выйти, нажимаю "Назад" и вместо возврата выхожу из приложения
0
66 / 56 / 6
Регистрация: 28.12.2011
Сообщений: 322
24.01.2017, 13:48
Цитата Сообщение от BatyrbekAl Посмотреть сообщение
...выхожу из приложения
Так нужно правильно описать метод onBackPressed в активити, в которой будут отображаться фрагменты.
1
26 / 26 / 6
Регистрация: 09.09.2015
Сообщений: 155
24.01.2017, 13:52  [ТС]
Цитата Сообщение от Hank Посмотреть сообщение
Так нужно правильно описать метод onBackPressed в активити, в которой будут отображаться фрагменты
Пожалуй попробую с фрагментами, спасибо за ответы
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
24.01.2017, 14:33
если очень утрировано на примере одного фрагмента
MainActivity
Кликните здесь для просмотра всего текста
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
40
41
42
43
44
45
46
47
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
 
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 
    private ActionBarDrawerToggle toggle;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn).setOnClickListener(this);
 
        final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        initDrawer(toolbar);
    }
 
    private void initDrawer(Toolbar toolbar) {
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        toggle = new ActionBarDrawerToggle(this, drawer, toolbar, android.R.string.ok, android.R.string.ok);
        toggle.setToolbarNavigationClickListener(toggleListener);
        toggle.syncState();
    }
 
    @Override
    public void onClick(View view) {
        getSupportFragmentManager().beginTransaction().add(R.id.container, new BlankFragment()).addToBackStack(null).commit();
        toggle.setDrawerIndicatorEnabled(false);
    }
 
    private final View.OnClickListener toggleListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            getSupportFragmentManager().popBackStack();
            if (getSupportActionBar() != null) {
                getSupportActionBar().setDisplayHomeAsUpEnabled(false);
            }
            toggle.setDrawerIndicatorEnabled(true);
        }
    };
}


тупо пустой фрагмент BlankFragment
Кликните здесь для просмотра всего текста
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
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class BlankFragment extends Fragment {
 
    public BlankFragment() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle b) {
        View view = inflater.inflate(R.layout.fragment_blank, container, false);
        //
        showBackArrow();
        return view;
    }
 
    private void showBackArrow() {
        AppCompatActivity activity = (AppCompatActivity) getActivity();
        if (activity != null) {
            ActionBar actionBar = activity.getSupportActionBar();
            if (actionBar != null) actionBar.setDisplayHomeAsUpEnabled(true);
        }
    }
}


разметка активити роли не играет, но для наглядности
Кликните здесь для просмотра всего текста
XML
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
40
41
42
43
44
45
46
47
48
49
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/colorPrimary"
            app:title="@string/app_name"
            app:titleTextColor="@android:color/white" />
 
        <FrameLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true">
 
            <Button
                android:id="@+id/btn"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="add fragment" />
 
        </FrameLayout>
 
        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/toolbar" />
 
    </RelativeLayout>
 
    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#eeeeee"
        android:fitsSystemWindows="true" />
 
</android.support.v4.widget.DrawerLayout>


дровер вытягивается и на фрагменте тоже
0
2 / 2 / 0
Регистрация: 14.02.2012
Сообщений: 34
24.01.2017, 18:01
Кстати, для меня тоже актуальная тема.
У меня уже реализовано приложение с боковым меню и кучей фрагментов, которые сменяют друг-друга в зависимости от того, что выбирают в меню.
Но один человечек говорит что всё это мазня, лучше разные активити. Т.к. не будет одного большого активити, содержащего много кода, описывающего смену этих фрагментов.
Остановились на том, что чёткого ответа на этот вопрос нет, обе схемы имеют свои плюсы и минусы.

Что можете подсказать? Есть ли чёткий профит от выбора архитектуры, строящейся на боковом меню и фрагментах, а не на окнах с боковыми меню?

PS: признаюсь, архитектура с разными окнами меня прельщает - т.к. будет множество объектов типа окно, просто у одних будет кнопка "Назад", а у других кнопка "Открыть меню". Этим проще в голове жонглировать, когда нужно программно воспроизвести какой-нибудь путь, открыв последовательно несколько окон.
Сейчас же мне надо жонглировать окнами с кнопкой назад, и одним большим окном с фрагментами.
0
 Аватар для Hellrider_
50 / 50 / 4
Регистрация: 12.03.2013
Сообщений: 171
24.01.2017, 18:31
С фрагментами можно нехилый гемморой поиметь если их много. Особенно весело с поворотом экрана
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
24.01.2017, 18:38
я резюмирую: если нет бокового дровера - фрагменты можно делить на ноль, от них толку никакого, только гимор
если дровер все таки есть то либо привет фрагменты либо писать свои вьюшки (по сути велосипед)
0
2 / 2 / 0
Регистрация: 14.02.2012
Сообщений: 34
25.01.2017, 11:16
Паблито, не согласен, что фрагменты нужны только для бокового дровера. (мб я не правильно тебя понял)
Как пример, если нужно вывести одно и тоже в двух разных активити на двух разных местах, а эти активити нельзя унаследовать от общего предка, то вместо того, что бы вставлять повторяющийся код (тем более если его много), лучше использовать один фрагмент.
Поправь, пожалуйста, если ошибаюсь.

Но если есть дровер и не хочется использовать фрагменты, то в природе есть архитектура на разных активити с единым дровером, пример которой и просит автор темы.
Мне попадалась статья на хабре, в которой была фраза, что обе архитектуры имеют право на существование (хотя там приводилася пример всё равно архитектуры на фрагментах). Собственно, я и хочу выяснить так ли это.

Я не пробовал, но думаю надо просто сделать одно активити с дровером, и унаследовать все прочие активити, где дровер нужен, от него. И переключаться - открывать новое активити на вершине стека, убивая все предыдущие. Но, повторюсь, я не пробовал ещё.

Добавлено через 6 минут
+ отключить анимацию открытия нового активити для красоты
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
25.01.2017, 11:41
Цитата Сообщение от Ksar13th Посмотреть сообщение
если нужно вывести одно и тоже в двух разных активити на двух разных местах
Цитата Сообщение от Паблито Посмотреть сообщение
писать свои вьюшки (по сути велосипед)
но это будет красивее чем эти упоротые фрагменты

Цитата Сообщение от Ksar13th Посмотреть сообщение
просто сделать одно активити с дровером, и унаследовать все прочие активити, где дровер нужен, от него. И переключаться - открывать новое активити на вершине стека, убивая все предыдущие. Но, повторюсь, я не пробовал ещё.
идея не очень...очень не очень

Цитата Сообщение от Ksar13th Посмотреть сообщение
Но если есть дровер и не хочется использовать фрагменты, то в природе есть архитектура на разных активити с единым дровером, пример которой и просит автор темы.
нет такой в природе
дровер придется лепить в разметке каждой активити
1
31 / 29 / 8
Регистрация: 07.01.2017
Сообщений: 205
30.05.2017, 21:58
Большим плюсом фрагментов вижу то, что их можно переиспользовать.
+ компоновать на 1 экране несколько штук.
В идеале надо понимать что ты делаешь + приложения бывают разные по своей архитектуре.
Но если 100 экранов то лепить 100 активити это тоже жесть)

Если по теме то сделать Drawer с фрагментами гораздо удобнее и проще.
+ к Drawery можно поприкручивать различные вьюпейджеры из фрагментов итд украшалки.
С активити это будет тот еще гемор уж точно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2017, 21:58
Помогаю со студенческими работами здесь

Navigation Drawer
Всем привет. Подскажите в чем может быть проблема. Создал Navigation Drawer по этому примеру. http://habrahabr.ru/post/250765/ добавил туда...

Navigation drawer
Скажите, как сделать так чтобы при открытии другого activity, navigation drawer можно было так же с левой стороны на экране вызвать? При...

Navigation drawer
Как так подключить navigation drawer чтобы он был доступен не в одном а во всех или в нескольких активити приложения и во всех этих...

Стилизация Navigation Drawer
Приложение вылетает при открытии, если применяю свой xml-файл для стилизации. Пробую стандартный файл стилизации - все хорошо. Проблему...

Добавление navigation drawer
Привет, есть приложение со множеством активити... нужно запихнуть в него navigation drawer c иконками и текстом к ним. И у меня почти это...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru