2015-02-12 4 views
9

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

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

Так быть зациклен на этой идее множественного фрагмента у меня есть:

  1. Создано несколько файлов Fragment.xml
  2. Определяется класс для каждой отдельной точки зрения
  3. создал список для отображения доступных фрагментов
  4. Мгновенный и отображаемый фрагмент, если он выбран

По существу, мой 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» вызывается, это просто, что дисплей не отображается. Я считаю, что я его сузился до того, что он не привязан к новой деятельности, созданной в результате изменения ориентации. В любом случае, я могу повторно присоединить фрагменты, которые уже созданы для нового действия.

В целом, вопросы, у меня есть следующие:

  1. Является ли эта модель даже хороший способ для моего приложения?
  2. Есть ли достойный способ обработки фрагментов, которые хорошо масштабируются?Не может найти какие-либо примеры.
  3. Использует '' новый MyFragment() '' каждый раз, когда открываю другую вкладку разумный способ достичь этого?
  4. Является ли мой способ хранения моих фрагментов в списке разумным способом до обрабатывать их?
  5. Как привязать фрагмент к новому действию после изменения ориентации ?

Благодарим вас за внимание.

* Должен был набрать весь этот код на лету, потому что по какой-то причине я не смог правильно преобразовать код C/P'd.

ответ

-1

Я считаю, что это хороший выбор, чтобы использовать фрагменты и начать с this example ...

Вы определенно должны переопределить некоторые «адаптер» для обработки всех транзакций более легко ...

Проверить here для проблема ориентации ...

Смежные вопросы