У меня проблемы с поиском рабочего примера использования фрагментов + RoboGuice. Проблема возникает, когда вы пытаетесь добавить/удалить фрагменты с помощью диспетчера транзакций фрагментов Android. Как только вы указываете фрагменту наследоваться от RoboFragment, менеджер транзакций больше не считает класс фрагментом (поскольку он расширяет RoboFragment). Однако вы можете использовать собственный диспетчер фрагментов RoboGuice, но он также дает сбой. Есть ли примеры динамического добавления/удаления фрагментов RoboGuice?
Любые простые примеры использования roboguice с фрагментами в Android?
Ответы (2)
Недавно я начал использовать фрагменты в новом проекте, и ниже приведен код, который я использую.
Я не наследую класс RoboFragment, но делаю то же самое, добавляя следующие строки в свои методы onCreate и onViewCreated. Наследование от RoboFragment не должно вести себя иначе, на самом деле это то, как выглядит RoboFragment.
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RoboGuice.getInjector(getActivity()).injectMembersWithoutViews(this);
}
public void onViewCreated(final View view, final Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RoboGuice.getInjector(getActivity()).injectViewMembers(this);
// Do whatever with your injected views.
}
Очевидно, я также реализовал onCreateView.
Затем в своем действии я расширяю FragmentActivity, поскольку использую пакет совместимости. Обратите внимание: вы должны использовать FragmentActivity, если вам нужна совместимость с предварительным уровнем API 11. Если вы просто поддерживаете 11 плюс, вам не нужна библиотека совместимости или использование FragementActivity. В своей деятельности я использую следующее, чтобы добавить фрагмент на свою страницу.
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentHolder, new MyFragment());
transaction.commit();
Тип R.id.fragmentHolder — это FrameLayout.
С этим все работает нормально, и я могу использовать все свои внедренные ресурсы и представления в своем фрагменте. Для полноты картины я использую последнюю версию 2.0-SNAPSHOT roboguice с версией r6 библиотеки compatibity-v4 для Android 2.2.1.
IllegalArgumentException: MyFragmentActivity does not appear to be a RoboGuice context (instanceof RoboContext)
- person Jeff Axelrod; 24.09.2012
Roboguice 1.x не совместим с библиотекой совместимости и фрагментами. Вам придется либо перенести версию 2.0, которая находится в стадии бета-тестирования, либо самостоятельно расширить классы Fragment*.
Более подробная информация доступна по адресу:
http://groups.google.com/group/roboguice/browse_thread/thread/2858bc10b83b6beb