Как обрабатывать несколько фрагментов для одного занятия

Я недавно начал смотреть на разработку приложений для моего устройства Android. Для меня этот интерес вызвал то, что я играл с несколькими arduinos, и у меня была прекрасная идея заставить их общаться с моим телефоном, как, например, интерфейс для любых значений, которые я измеряю на самом arduino. Теперь я мог бы выбрать легкий путь и использовать общедоступный источник для достижения этой цели, но научиться этому не так уж и много, и я хотел бы, чтобы это было так, как я хочу.

Теперь я полагаю, что первый вопрос, который мне нужно задать, состоит в том, будет ли несколько фрагментов / одно действие лучшим способом для этого? По сути, я хочу 1 соединение с Arduino, вытащить все значения, но в зависимости от выбранной «вкладки» я хочу, чтобы определенные значения отображались определенным образом. Я решил сделать каждую вкладку отдельным фрагментом и просто отображать значения по-разному. Как я уже сказал, я только начинаю опыт разработки под Android, поэтому у меня не так уж много оснований для этого выбора.

Так что я зациклен на этой идее с несколькими фрагментами:

Создано несколько файлов Fragment.xmlОпределен класс для каждого отдельного представленияСоздан список для отображения доступных фрагментовУстановленный и отображаемый фрагмент при выборе

По сути, мой onMenuItemSelect выглядел следующим образом.

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();
}

И этот метод тоже работал. Я мог бы заставить его отображать все мои фрагменты без необходимости каждый раз заново создавать экземпляр каждого фрагмента. Я полагаю, что это делает то, что я хочу, это достаточно хорошо масштабируется (лучше, чем IMO с коммутатором / кейсом). Проблема, которая у меня есть сейчас, в том, что все сходит с ума, когда я меняю ориентацию. До сих пор я только тестировал портретный режим, я не могу просматривать какие-либо свои фрагменты, когда выбираю их в другой ориентации. Я могу запустить его в любой ориентации, и он работает, но когда я изменяю его во время выполнения, я вижу только тот фрагмент, который у меня был открыт, когда я менял ориентацию.

Теперь каждый фрагмент "onCreateView" вызывается, просто отображение не отображается. Я считаю, что я сузил его, чтобы не привязываться к новому действию, созданному из изменения ориентации. Есть ли в любом случае, я могу присоединить фрагменты, которые уже созданы к новому действию.

Таким образом, у меня есть следующие вопросы:

Является ли эта модель хорошим способом для моего приложения?Есть ли достойный способ обработки фрагментов, который хорошо масштабируется? Не могу найти никаких примеров.Является ли использование «new MyFragment ()» каждый раз, когда я открываю другую вкладку, разумным способом для достижения этой цели?Является ли мой способ хранения моих фрагментов в списке разумным способом их обработки?Как заново прикрепить фрагмент к новому действию после изменения ориентации?

Спасибо за ваше время.

* Пришлось набирать весь этот код на лету, потому что я по какой-то причине не смог заставить мой C / P-код правильно отформатировать.

Ответы на вопрос(1)

Ваш ответ на вопрос