Программирование под android

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

wdrakula пишет:

 (для радистов спойлер - пользователь с ником -NMi-)

Ему и предназначалось, ты ж не радист в этом топике

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ну вот. Всё правильно! А почему ты так не хотел? Это очень по-java-вски.

--------------------------

Я чуть-чуть занудства позволю: ты понимаешь, что java интерпретируемый язык? Акция по ID у тебя ищется в каждом вызове

navController.navigate(R.id.action_global_nav_......);

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

wdrakula пишет:

Я чуть-чуть занудства позволю: ты понимаешь, что java интерпретируемый язык? Акция по ID у тебя ищется в каждом вызове

navController.navigate(R.id.action_global_nav_......);

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

Да мы это потом будем улуччать, всё будет норм ;) Щас не до рефакторинга, щас воюю с by design решениями от Google. Вот смотри, проблема - тут: https://stackoverflow.com/questions/31643193/navigationview-items-not-checking, объяснение - тут: https://issuetracker.google.com/issues/37048466#makechanges

Т.е. есть у тебя в Navigation Drawer меню, которое выезжает слева. Пока оно одноуровневое - NavigationView прекрасно выделяет щёлкнутый элемент списка. Захотел ты, как я - добавить подгруппу (ну очевидно же, чтобы было наглядно видно) - и ппц, это меню уже не работает как единое, т.е. пункты подгруппы при клике на них - не выделяются.

С одной стороны - всё верно идеологически: есть вложенное <menu> - хай оно само там чего-то рулит. С другой стороны, в  практическом применении подгруппа - тупо для заголовка, и всё. Понимаешь, какая, млять, диалектика бытия?

Поборол:

  navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

                Log.d(TAG,"onNavigationItemSelected LISTENER!!!!");

                if(callMenuItemAction(item)) {
                    if(lastSelectedMenuItem != null)
                    {
                        lastSelectedMenuItem.setChecked(false);
                    }
                    item.setChecked(true);
                    lastSelectedMenuItem = item;
                    drawer.closeDrawer(GravityCompat.START);
                }

                return true;
            }
        });

Ну и переписал часть на загрузку при старте, как ты и просил:

        // забиваем биндинг пунктов меню на связанные с ними глобальные Action
        menuItemToAction.put(R.id.nav_status, R.id.action_global_nav_status);
        menuItemToAction.put(R.id.nav_sensors, R.id.action_global_nav_sensors);
        menuItemToAction.put(R.id.nav_devices, R.id.action_global_nav_devices);
        menuItemToAction.put(R.id.nav_settings, R.id.action_global_nav_settings);

Сам биндинг теперь много быстрее:

    private boolean callMenuItemAction(@NonNull MenuItem item)
    {

        int itemId = item.getItemId();
        if(menuItemToAction.containsKey(itemId))
        {
            navController.navigate(menuItemToAction.get(itemId));
            return true;
        }

        return false;

    }

З.Ы. И это я тебе ещё не рассказывал, какие геморрои с backstack, если вызывать NavController.navigate - эта хрень добавляет вызов в backstaсk, тут вроде всё норм. Штатное поведение NavigationView - нихрена не добавляет переход в backstack - тут тоже всё норм.

А засада в том, что ViewPager, если происходит добавление переходов в backstack (ну шом потом по кнопке "назад" телепонькаться, ну ты понял) - начинает работать неправильно, потому как внутри себя хранит созданные view, и при переходе по "назад" - эти view не пересоздаёт, вообще НИКАКИХ событий им не посылает. Чуешь прикол, да?

Лечится это дело так:

 pager = (ViewPager) root.findViewById(R.id.pager_sensors);

        // ВОТ ЭТОТ МЕТОД ПОЗВОЛЯЕТ НОРМАЛЬНО ОБХОДИТЬСЯ С BACKSTACK, ТОГДА ViewPager не сохраняет у себя ссылки на View, и пересоздаёт их !!!
        pager.setSaveFromParentEnabled(false);

Фухх. Бобёр выдохнул. Шо я имею сказать? В том зоопарке - дискотека с саблями: не туда пойдёшь - прирежут :) Но я не сдаюсь.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Немножко допилил, настройки там всякие, анимации переходов, новая цветовая гамма: https://youtu.be/JHSz6ZTS3WM

Поменяешь что-то в одном месте - ломается в другом. Не андроид, а минное поле :)))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Ну дык хорошо же!

Согласись - Андроид - прикольная платформа? Затягивает. Очень много возможностей и путей решения. Ну и глюков тоже много.

Вроде всё ну очччччень легко, и вдруг поведение не такое, как ожидаешь! ;)))) Но писать приятно и инструмент - сама Студия!!!! Шоп я так жил! По мне - так супер удобно.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

wdrakula пишет:

Ну дык хорошо же!

Согласись - Андроид - прикольная платформа? Затягивает. Очень много возможностей и путей решения. Ну и глюков тоже много.

Вроде всё ну очччччень легко, и вдруг поведение не такое, как ожидаешь! ;)))) Но писать приятно и инструмент - сама Студия!!!! Шоп я так жил! По мне - так супер удобно.

Ну да, затягивает, не спорю. И про глюки - тоже не спорю :) Чего только стоит архитектурный про@б в виде зоопарка с getFragmentManager(), getSupportFragmentManager(), getChildFragmentManager() - это просто песня! Такое ощущение, что всё это дело допиливается наживую, по ходу :( 

Ну и event propagation (bubbling) - сильно не хватает. Да и вообще, взаимодействие по цепочкам сверху-вниз - из рук вон плохо, костылями типа Bundle и пр.

Зато анимации красивые :)

З.Ы. Я злой сегодня, потому что из-за сраного ViewPager и использования getFragmentManager вместо getChildFragmentManager - текла память, ужасно. Пока разобрался - готов был монитор разбить.

Но затягивает, да.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

 Ты не психуй, а пойми - я не зря написал про множество решений. Видишь - кусок АПИ глючный - реши ту же задачу другим образом. Мне фрагменты сразу не понравились я своего мелкого ризалта добился, но на твои грабли не наступал. И больше не пользуюсь.

Фрагменты изначально нужны были для универсальности между планшетом и тилипоном. Вот тебе это зачем? Скилл ты себе на этой ебле отрастил - позавидовать... и чо?

Надеюсь - ты меня понимаешь? Не обижайся только!

----------------------

как Фортран - настоящему программисту (если не помнишь - тебе Женя пояснит ;) ), так для тилипона есть текст вью, имидж вью, лист вью. И линеар лейаут... ну может еще рилейтив. Вот честно - вообще больше ничего не надо. Для любителей извращений - навигейшн бары сверху, снизу.... ты вот на выдвижном уже наебался - потому как нехер извращениями пользоваться ;))))

------------------------

Ладно! Не бери в голову! Я ухрючился немного... меня пятёрка нагрела на бутылку Бакарди - там просто водка оказалась... я и расстроился! И главное понимаю, что доказать ничего не смогу... но очень хочется им эту бутылку забить!

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Дык прозрачный если Баккарди это и есть просто водка) 

sadman41
Offline
Зарегистрирован: 19.10.2016

DIYMan пишет:

Поменяешь что-то в одном месте - ломается в другом. Не андроид, а минное поле :)))

Дак потомушто это линупс ;)

Я вон давеча решил перещупать импортозамещённый Альт-линукс. Допилено знатно, конечно. В AD и Windows network практически с полпинка залетает. Но, б-ть, вход под доменным пользователем в систему - это просто треш. Неаккуратно ESC жмакнул - и тебе ни поля ввода в модальном окне, нихера...

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Оно коннектится, и уже получает с контроллера данные! Р - ррадость :)

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

DIYMan пишет:

Оно коннектится, и уже получает с контроллера данные! Р - ррадость :)

1.А ты разве с эмулятора не коннектился?

2.Покажи картинку (видео) последнего варианта.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Пока с эмулятора только и работаю. Сейчас коннекчусь уже к железянному контроллеру, по IP в локальной сети. Сам контроллер через Wi-Fi-свисток всё это дело разруливает. Ещё раз убеждаюсь, что единый текстовый протокол - весчь: неважно, откуда поступила команда - через UART, по Wi-Fi, через внешний сервис gardenboss.ru - оно это дело разберёт и выплюнет ответ.

Вот, приделал первую версию голосового управления (эмуль тормозит при захвате видео): https://youtu.be/A_huwPzCbPE Потихоньку буду расширять этот функционал, чтобы уручную, значится, не тыкать много конопочек.

Также уже приделал управление фрамугами: https://youtu.be/_oMSrU1TL0E

Короче, дела движутся ;) Интерфейс устаканим, с NavigationView я потихоньку подружился (ттт), вкурил, что к чему. Конечно, отладки там - ещё мама не горюй, но уже забавно: лежит железка на соседнем столе, никуда проводами не подключенная, а я с эмулятора щёлкаю кнопочки и вижу, как на TFT-экране железки меняется состояние. Можно и в обратку - потыкал на TFT-экране кнопочки, смотришь на эмулятор - он отображает изменения.

Добби ооочень доволен. Я ещё пару лет назад говорил напарнику - нахер этот TFT-экран, если есть андроид? Был не услышан. Надеюсь, теперь буду услышан ;) Шутка ли - семидюймовый TFT-экран стоит 3 000 рублей, для пользователя это существенно. А смартфон - есть у каждого бомжа.

К тому же планирую, когда буду выкладывать в Google Play - сделать подписку, например, 100 руб/месяц. Курочка по зёрнышку, как известно. Заодно и разработку отобью, со временем.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Уже перелез на железный смартфон - кое-как установил драйвера для своего Honor 7A, и - вперёд! Работает, всё красяво. С интерфейсом, конечно, ещё куча работы, но - выправим потихоньку.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Сделано уже - кучу. Чтобы туда-сюда скрины не гонять, кому интересно, начиная с этого сообщения и ниже - выкладываю скрины: https://www.forumhouse.ru/posts/25741154/

Контроллер межпланетной пусковой установки, не иначе :)))

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Да, я в курсе, спасибо. Приложение уже в плеймаркете.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

DIYMan можешь им не отвечать, это боты. Подробности тут - http://arduino.ru/forum/obshchii/chistim-forum-ot-spama-vmeste?page=6#comment-530789