Nano Hash - криптовалюты, майнинг, программирование

Использование фрагментов для восстановления кнопки Home/Drawer

У меня есть приложение с основным действием, которое загружает навигационный ящик и пару фрагментов, которые загружаются в этом действии... В навигационном ящике у меня есть 4 варианта A, B, C и D... первый загружает FragmentA на мою активность и последние 3 загрузки FragmentB ..

FragmentA отображает список элементов, и при выборе одного из этих элементов FragmentB используется для загрузки его содержимого... Я хочу изменить значок дома (гамбургер/ящик) на FragmentB для значка вверх при запуске из FragmentA (и измените соответствующее поведение, чтобы сделать popstack при выборе). У меня нет проблем с этим, используя setDisplayHomeAsUpEnabled(true), но поскольку все это происходит внутри одного действия, если я затем выберу еще один вариант (скажем, B) из навигационного ящика, значок вверх все равно будет отображаться (он также отображается на выскочившем фрагменте)... если я использую setDisplayHomeAsUpEnabled(false), все это делается скрыть кнопку «Домой/Вверх» на панели инструментов, мне нужно восстановить кнопку «Домой» и убедиться, что она будет отображаться при запуске FragmentB из меню ящика...

Эта проблема никому не звонит? или я просто неправильно использую фрагменты? .. любые советы будут оценены

ИЗМЕНИТЬ это более или менее то, что у меня есть в коде

В основном действии.. как onNavigationItemSelected (элемент MenuItem) для ящика у меня есть что-то вроде этого...

switch(optionNumber) {
            case 0:
                  fragment = FragmentA.newInstance(optionNumber);
                break;
            default:
                  fragment = FragmentB.newInstance(optionNumber);
                break;
        }
        Fragment frag = fragmentManager.findFragmentByTag("current_fragment");
        if (frag != null && frag.getClass() == FolderFragment.class){
            ((FolderFragment)frag).resetScroll();
        }

        fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
        fragmentManager.beginTransaction().replace(R.id.content, fragment, "current_fragment").commit();

который выбирает фрагмент для загрузки в соответствии с выбранной опцией.

В FragmentA я вызываю FragmentB с помощью этого ..

 FragmentB fFragment = FragmentB.newInstance(position);
    Bundle args = new Bundle();
    args.putString("filter", "something"); fFragment.setArguments(args);

    mActivity.getSupportFragmentManager().beginTransaction()
            .replace(R.id.flContent, fFragment, "current_fragment")
            .addToBackStack(null)
            .commit();

Сохранение фрагмента в стеке

И во фрагменте B внутри функции onResume() я получил что-то вроде...

String filter = getArguments().getString("filter", null);


    if (type != null) {
        mActivity.setTitle(title);
        mActivity.getSupportActionBar().setDisplayShowHomeEnabled(true);

    }else {
        /*mActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        mActivity.getSupportActionBar().setDisplayShowHomeEnabled(true);
        mActivity.getSupportActionBar().setHomeButtonEnabled(true);
        mActivity.getSupportActionBar().setIcon(R.mipmap.ic_menu);*/
    }

Поэтому, когда я создаю фрагмент B, я проверяю аргументы и смотрю, исходит ли он из фрагмента A или нет (я также мог бы проверить задний стек менеджера фрагментов и посмотреть, есть ли что-то)... там я просто меняю значок ящика с помощью setDisplayShowHomeEnabled(true) . .. оставив стрелку назад, если я вернусь к FragmentA (через onBackPressed()) FragmentA показывает стрелку, и мне нужно, чтобы она отображала исходный значок ящика... то же самое происходит, если я выбираю параметр в меню ящика... Это дает больше ясности моей проблеме?... У меня есть код с комментариями, потому что он не работает. результат функции, насколько я знаю)...


  • Пожалуйста, добавьте исходный код для лучшего понимания 22.10.2015
  • Итак, похоже, что вы запускаете FragB из двух мест, и одно место изменит значок ящика только одним способом, а другое должно изменить его двумя способами. Поэтому при запуске FragB из меню прокрутки просто определите нужный способ, а затем измените его соответствующим образом. 23.10.2015
  • @SeseSchneider, ну вот... 24.10.2015
  • @CmosBattery правильно .. но как именно мне вернуть его обратно? 24.10.2015

Ответы:


1

Через некоторое время я наконец нашел этот пост

Переключение между изображением Android Navigation Drawer и Up знак вставки при использовании фрагментов

Я предполагаю, что при использовании Drawer в интерфейсе вам может понадобиться решить эту проблему с этим компонентом... этот пост дал мне ответ.
Особое внимание к последнему комментарию Вольфрама Риттмайера

26.10.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..