Недавно я начал изучать разработку приложений для своего устройства Android. Что заставило меня задуматься, я играл с несколькими ардуинами, у них была отличная идея заставить их общаться с моим телефоном, как сказать интерфейс для любых ценностей, которые я измеряю на самом ардуине. Теперь я мог бы сделать простой выход и использовать общественный источник для достижения этого, но не так много, чтобы учиться этому, и я хотел бы, чтобы он был таким, каким я его хочу.Как обрабатывать несколько фрагментов для одной активности
Теперь я предполагаю, что первый вопрос, который мне нужно задать, - это сделать несколько фрагментов/отдельных действий для меня? В принципе, я хочу 1 соединение с arduino, вытащить все значения, но в зависимости от выбранной мной «табуляции» я хочу, чтобы определенные значения отображались определенным образом. Я решил сделать каждую вкладку другим фрагментом и просто отобразить значения разными способами. Как я уже сказал, я только начинаю разработку Android, поэтому у меня не так много, чтобы основывать этот выбор.
Так быть зациклен на этой идее множественного фрагмента у меня есть:
- Создано несколько файлов Fragment.xml
- Определяется класс для каждой отдельной точки зрения
- создал список для отображения доступных фрагментов
- Мгновенный и отображаемый фрагмент, если он выбран
По существу, мой onMenuItemВыберите вид как это.
FragmentTransaction FT = getFragmentManager.beginTransaction();
switch(position){
case 1:
FT.replace(R.id.fragment_container, new MyFragment()).commit();
break;
case 2:
FT.replace(R.id.fragment_container, new MySecondFragment()).commit();
break;
}
Приведенный выше код работал, он делал то, что я хотел, без каких-либо проблем. Мне это действительно не нравится, потому что для каждого фрагмента, который я хотел добавить, мне нужно было бы добавить новый ключ к коммутатору. Также каждый раз создается новый фрагмент, даже если он уже создан. Это проблема?
Самая большая проблема, с которой я столкнулся, заключается в том, что она не самая простая в масштабировании. Для 2-3 фрагментов это не самый худший способ справиться с этим (на моих глазах). Я хочу иметь как можно больше фрагментов без отдельного случая для каждого в коммутаторе. Итак, что я сделал, был создан фрагмент-лист для хранения одного экземпляра каждого из моих фрагментов.
List<Fragment> fragmentList;
private void populateFragmentList();{
fragmentList = new ArrayList<Fragment>();
fragmentList.add(new HomeFrag());
fragmentList.add(new BluetoothFragment());
fragmentList.add(new USBFragment());
fragmentList.add(new RCInfoFragment());
fragmentList.add(new ControllerFragment());
fragmentList.add(new FingerCordsFrag());
}
public void onMenuItemSelect(int position, int curPosition){
if(fragmentList.get(position).isAdded()){
getFragmentManager().beginTransaction().show(fragmentList.get(postition))
.hide(fragmentList.get(curPosition)).commit();
}
else
getFragmentManager().beginTransaction().add(R.id.fragment_container, fragmentList.get(position)).show(fragmentList.get(position)).hide(fragmentList.get(curPosition)).commit();
}
И этот метод также работал. Я мог бы заставить его отображать все мои фрагменты, без необходимости повторного создания каждого фрагмента каждый раз. Я считаю, что это делает то, что я хочу, чтобы он делал, он масштабируется довольно хорошо (лучше, чем переключатель/case IMO). Проблема, которую я сейчас испытываю, заключается в том, что все сходит с ума, когда меняю ориентацию. До сих пор я только тестировал портретный режим, я не могу просматривать какие-либо мои фрагменты, когда я их выбираю в другой ориентации. Я могу запустить его в любой ориентации, и он работает, но когда я меняю его во время выполнения, я могу увидеть только один фрагмент, который был открыт, когда я изменил ориентацию.
Теперь каждый фрагмент «onCreateView» вызывается, это просто, что дисплей не отображается. Я считаю, что я его сузился до того, что он не привязан к новой деятельности, созданной в результате изменения ориентации. В любом случае, я могу повторно присоединить фрагменты, которые уже созданы для нового действия.
В целом, вопросы, у меня есть следующие:
- Является ли эта модель даже хороший способ для моего приложения?
- Есть ли достойный способ обработки фрагментов, которые хорошо масштабируются?Не может найти какие-либо примеры.
- Использует '' новый MyFragment() '' каждый раз, когда открываю другую вкладку разумный способ достичь этого?
- Является ли мой способ хранения моих фрагментов в списке разумным способом до обрабатывать их?
- Как привязать фрагмент к новому действию после изменения ориентации ?
Благодарим вас за внимание.
* Должен был набрать весь этот код на лету, потому что по какой-то причине я не смог правильно преобразовать код C/P'd.