Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
BatyrbekAl
22 / 22 / 4
Регистрация: 09.09.2015
Сообщений: 112
1

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

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

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

Android Studio 2.2.3
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2017, 12:45
Ответы с готовыми решениями:

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

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

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

Navigation Drawer
Всем привет. Подскажите в чем может быть проблема. Создал Navigation Drawer по этому примеру....

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

14
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,821
Завершенные тесты: 1
24.01.2017, 12:49 2
Цитата Сообщение от BatyrbekAl Посмотреть сообщение
не используя фрагменты
а что использовать?
1
Hank
64 / 55 / 5
Регистрация: 28.12.2011
Сообщений: 309
24.01.2017, 12:53 3
Цитата Сообщение от BatyrbekAl
не используя фрагменты
а у меня вопрос - почему?
1
BatyrbekAl
22 / 22 / 4
Регистрация: 09.09.2015
Сообщений: 112
24.01.2017, 12:58  [ТС] 4
Цитата Сообщение от Hank Посмотреть сообщение
а у меня вопрос - почему?
Чтобы выглядело лучше и ещё кнопка назад в верхнем левом углу чтобы вернуться назад, и свое меню окна в правом верхнем углу.
0
Hank
64 / 55 / 5
Регистрация: 28.12.2011
Сообщений: 309
24.01.2017, 13:05 5
Цитата Сообщение от BatyrbekAl Посмотреть сообщение
Чтобы выглядело лучше
лучше в чем?

Цитата Сообщение от BatyrbekAl Посмотреть сообщение
в верхнем левом углу чтобы вернуться назад, и свое меню окна в правом верхнем углу.
что мешает это реализовать применяя фрагменты?
1
BatyrbekAl
22 / 22 / 4
Регистрация: 09.09.2015
Сообщений: 112
24.01.2017, 13:20  [ТС] 6
Цитата Сообщение от Hank Посмотреть сообщение
что мешает это реализовать применяя фрагменты?
Допустим я зашел в товар просмотрел и хочу выйти, нажимаю "Назад" и вместо возврата выхожу из приложения
0
Hank
64 / 55 / 5
Регистрация: 28.12.2011
Сообщений: 309
24.01.2017, 13:48 7
Цитата Сообщение от BatyrbekAl Посмотреть сообщение
...выхожу из приложения
Так нужно правильно описать метод onBackPressed в активити, в которой будут отображаться фрагменты.
1
BatyrbekAl
22 / 22 / 4
Регистрация: 09.09.2015
Сообщений: 112
24.01.2017, 13:52  [ТС] 8
Цитата Сообщение от Hank Посмотреть сообщение
Так нужно правильно описать метод onBackPressed в активити, в которой будут отображаться фрагменты
Пожалуй попробую с фрагментами, спасибо за ответы
0
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,821
Завершенные тесты: 1
24.01.2017, 14:33 9
если очень утрировано на примере одного фрагмента
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>

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

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

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

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

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

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

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

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

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

Если по теме то сделать Drawer с фрагментами гораздо удобнее и проще.
+ к Drawery можно поприкручивать различные вьюпейджеры из фрагментов итд украшалки.
С активити это будет тот еще гемор уж точно.
0
30.05.2017, 21:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2017, 21:58

Navigation Drawer
Пытаюсь разобраться с Navigation Drawer. Делаю по гайду...

Подскажите по Navigation drawer
Создал activity с классическим примером реализации Navigation drawer, с таким, где анимацией...

Drawer Navigation and MenuItem
Добрый вечер. Вот такая проблема возникла. Вот в MainActivity есть Выдвижное меню(Drawer...


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

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

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