Любые простые примеры использования roboguice с фрагментами в Android?

У меня проблемы с поиском рабочего примера использования фрагментов + RoboGuice. Проблема возникает, когда вы пытаетесь добавить/удалить фрагменты с помощью диспетчера транзакций фрагментов Android. Как только вы указываете фрагменту наследоваться от RoboFragment, менеджер транзакций больше не считает класс фрагментом (поскольку он расширяет RoboFragment). Однако вы можете использовать собственный диспетчер фрагментов RoboGuice, но он также дает сбой. Есть ли примеры динамического добавления/удаления фрагментов RoboGuice?


person technoviking    schedule 27.11.2011    source источник
comment
У меня RoboGuice и Fragments прекрасно работают в приложении. Можете ли вы предоставить трассировку стека, чтобы мы могли увидеть, в чем проблема?   -  person Donn Felker    schedule 29.11.2011
comment
Кроме того, какую версию библиотеки совместимости вы используете?   -  person Donn Felker    schedule 29.11.2011
comment
Я также ищу некоторые примеры, кажется, я получаю много NPE, когда пытаюсь подключить материал InjectFragment. Я хотел бы увидеть некоторые рабочие примеры.   -  person danb    schedule 12.12.2011


Ответы (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.

person Kingamajick    schedule 20.01.2012
comment
Спасибо, Кинг. Есть ли у вас какой-либо код, который вы нашли или можете сделать доступным для фрагментов, которые действительно делают значимые вещи? - person danb; 20.01.2012
comment
Боюсь, что нет, однако вы должны иметь возможность делать все, что вы можете делать с Activity in a Fragment. Единственная другая часть — это передача данных из одного фрагмента в другой, поскольку они не должны взаимодействовать напрямую. Как я видел этот подход, это проверить тип getActivity() в onCreate() и убедиться, что это какой-то интерфейс, который вы создали для приема данных из фрагмента. Таким образом, ваша активность может реализовать этот интерфейс и передать данные, если это необходимо, следующему фрагменту. - person Kingamajick; 21.01.2012
comment
Вы уверены, что это работает? Когда я пробую это с Roboguice 2.0, я получаю IllegalArgumentException: MyFragmentActivity does not appear to be a RoboGuice context (instanceof RoboContext) - person Jeff Axelrod; 24.09.2012
comment
Является ли ваша активность RoboFragmentActivity? - person Kingamajick; 25.09.2012

Roboguice 1.x не совместим с библиотекой совместимости и фрагментами. Вам придется либо перенести версию 2.0, которая находится в стадии бета-тестирования, либо самостоятельно расширить классы Fragment*.

Более подробная информация доступна по адресу:

http://groups.google.com/group/roboguice/browse_thread/thread/2858bc10b83b6beb

person kontinuity    schedule 15.12.2011