Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Mish2
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 21
1

BottomNavigationView и кнопка назад

16.09.2017, 23:07. Просмотров 504. Ответов 4
Метки нет (Все метки)

Всем привет! Подскажите, пожалуйста, как можно выйти обратно из одной активности и попасть в предыдущую активность с BottomNavigationView на тот фрагмент, на который изначально заходил?
Попытаюсь объяснить поподробнее.
Имеется Активность с BottomNavigationView с 2-мя пунктами меню:

BottomNavigationView и кнопка назад


При нажатии этих пунктов меню появляются фрагменты. При нажатии "Биография" - фрагмент с биографией, при нажатии "Фотографии" - фрагмент с галереей.

BottomNavigationView и кнопка назад
BottomNavigationView и кнопка назад


При нажатии одной из картинок в галереи - переходит на новую Активность, где открывается 1 фотография во весь экран (на примере пока размер картинки пока маленький):

BottomNavigationView и кнопка назад


Если нажимаю обратно кнопку назад через ActionBar:

BottomNavigationView и кнопка назад


то возвращается на предыдущую Активность, НО во фрагмент "Биография":

BottomNavigationView и кнопка назад


Вопрос. Как сделать, чтобы возвращался именно во фрагмент "Фотографии". Причем, если нажать физически кнопку "Назад" на устройстве, то все хорошо работает и переходит обратно во фрагмент "Фотографии", где пользователь может выбрать другое фото и и нажать на него. Но хотел бы реализовать еще и через ActionBar с кнопкой "назад".

Вот Активити, где располагается это меню с 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public class BiogrPhoto extends AppCompatActivity {
 
   
    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {
 
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment fragment = null;
            Class fragmentClass = null;
 
            int id = item.getItemId();
 
            if (id == R.id.biografy) {
                fragmentClass = BiografyClass.class;
            } else if (id == R.id.photo) {
                fragmentClass = PhotoClass.class;
 
            }
            try {
                fragment = (Fragment) fragmentClass.newInstance();
            } catch (Exception e) {
                e.printStackTrace();
            }
 
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager
                    .beginTransaction()
                    .replace(R.id.fragment, fragment)
                    .commit();
 
            setTitle(item.getTitle());
 
            return true;
        }
 
    };
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.biogr_photo);
 
        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
 
        BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                startActivity(new Intent(this, ArsenalChoicePlayers.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
 
}

Фрагмент с Биографией:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class BiografyClass extends Fragment {
 
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
 
        View rootView =
                inflater.inflate(R.layout.biografy_class, container, false);
 
               return rootView;
 
    }
}
Фрагмент с Фотографиями:

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
public class PhotoClass extends Fragment {
 
 
    @Nullable    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
 
        View rootView =
                inflater.inflate(R.layout.photo_class, container, false);
 
 
        GridView gridView = (GridView) rootView.findViewById(R.id.gridView);
        gridView.setAdapter(new ImageAdapter(getActivity()));
 
 
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 
 
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                Intent i = new Intent(getActivity().getApplicationContext(), FullImageActivity.class);
 
                i.putExtra("id", position);
                startActivity(i);
 
 
            }
        });
 
 
        return rootView;
 
    }
 
}
Активность, с полной фотографией, когда мы выбираем в галерее:

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
public class FullImageActivity extends AppCompatActivity {
 
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_full_image);
 
 
 
        Intent i = getIntent();
        int position = i.getExtras().getInt("id");
        ImageAdapter adapter = new ImageAdapter(this);
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setImageResource(adapter.images[position]);
 
        ActionBar actionBar = getSupportActionBar();
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
 
    }
 
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                startActivity(new Intent(this, BiogrPhoto.class));
                return true;
 
            default:
                return super.onOptionsItemSelected(item);
 
        }
    }
 
 
}

Заранее всех благодарю.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2017, 23:07
Ответы с готовыми решениями:

Кнопка назад
есть программа в ней до 10 activity если переходить по ним, то далее при...

Кнопка назад
Добрый вечер. Как правильно сделать кнопку назад не из Манифеста а в коде я...

Кнопка назад (Back)
Здрасте. Как сделать чтобы при нажатии кнопки назад, активити не...

Кнопка назад не работает
Здравствуйте. Подскажите в чем может быть дело. При нажатии системной кнопки...

Кнопка назад на предыдущий фрагмент
Всем привет! Сможет ли кто-нибудь подсказать? Есть приложение: на главной...

4
264D
33 / 35 / 9
Регистрация: 03.02.2017
Сообщений: 130
17.09.2017, 01:55 2
А как же Material Design GuideLine где не советуют использовать BottomNavigationView если количество вкладок меньше 3-х или больше 5-ти?! Это заказчик сам придумал такой дизайн?

Don’t.
If there are fewer than three destinations, consider using tabs instead.
Добавлено через 14 минут
По нажатию на кнопку хоум в FullImageActivity у тебя создается новая стартовая активность активность: startActivity(new Intent(this, BiogrPhoto.class));, а ты хочешь чтобы срабатывало getActivity().onBackPressed();
Java
1
2
3
4
5
6
7
8
9
10
11
12
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                startActivity(new Intent(this, BiogrPhoto.class));
                return true;
 
            default:
                return super.onOptionsItemSelected(item);
 
        }
    }
0
ExFau$t
686 / 575 / 133
Регистрация: 08.05.2012
Сообщений: 2,834
17.09.2017, 09:54 3
Зачем вообще в андроиде пилить яблочную навигацию?
0
Mish2
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 21
17.09.2017, 13:57  [ТС] 4
Спасибо! Это для примера. Изначально было 3 вкладки, но решил одну убрать. Может добавлю)

Добавлено через 1 минуту
Если есть такая возможность, то почему бы и нет. Смотрится ведь красиво!
0
ExFau$t
686 / 575 / 133
Регистрация: 08.05.2012
Сообщений: 2,834
17.09.2017, 14:30 5
Цитата Сообщение от Mish2 Посмотреть сообщение
Смотрится ведь красиво!
Это смотрится тупо, а главное избыточно. Вот зачем мне тянуть палец на верх экрана, если по логике подразумевается аппаратная кнопка.
0
17.09.2017, 14:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2017, 14:30

Свой Launcher. Срабатывает кнопка "назад"
Здравствуйте! -Пишу свой простенький Laucher(во многом опирался на этот...

Системная кнопка "Назад"
как научить программу реагировать на нажатие этой самой кнопки?

Назад в activity_main
Всем привет,подскажите пожалуйста ,я сделал при нажатии на кнопку меня...


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

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

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