Injectview (Roboguice) не работает с несколькими макетами

Итак, у меня есть разные схемы для этого одного Действия.

И у меня есть разные классы, каждый из которых открывает и выполняет свою работу с макетом.

Я добавляю эти классы в Activity через @Inject. Все это без проблем.

Но когда я пытаюсь использовать @InjectView в одном из элементов управления неактивного макета, я получаю сообщение об ошибке.

11-02 19: 17: 31.086: ОШИБКА / AndroidRuntime (1326): вызвано: java.lang.NullPointerException: не удается ввести нулевое значение в класс be.baes. notes.View.EditNoteImpl.saveButton, когда поле не @Nullable

Тогда это будет код.

public class EditNoteImpl implements EditNote {
    @Inject CancelEditNoteClickListener cancelEditNoteClickListener;
    @Inject SaveNoteClickListener saveNoteClickListener;
    @Inject Provider<Activity> activity;
    @InjectView(R.id.saveButton) Button saveButton;

    /* (non-Javadoc)
     * @see be.baes.notes.EditNote#activateEditNote()
     */
    @Override
    public void activateEditNote()
    {
        activity.get().setContentView(R.layout.editnote);

        this.saveButton.setOnClickListener(saveNoteClickListener);
    }
}

Однако я могу это сделать.

public class EditNoteImpl implements EditNote {
    @Inject CancelEditNoteClickListener cancelEditNoteClickListener;
    @Inject SaveNoteClickListener saveNoteClickListener;
    @Inject Provider<Activity> activity;
    private Button saveButton;

    /* (non-Javadoc)
     * @see be.baes.notes.EditNote#activateEditNote()
     */
    @Override
    public void activateEditNote()
    {
        activity.get().setContentView(R.layout.editnote);
        saveButton = (Button)activity.get().findViewById(R.id.saveButton);

        this.saveButton.setOnClickListener(saveNoteClickListener);
    }
}

Есть ли лучший способ сделать это?

8
задан chrissie1 2 November 2011 в 18:39
поделиться