AndroidAnnotations не работает с унаследованным классом

У меня есть фрагмент (NavMenuStats), который расширяет родительский фрагмент (NavMenu).

Этот родительский фрагмент переопределяет метод onCreateView, например:

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    if (some condition) {

        View view = ...

        // Do stuff and return view. Everything works well

        return view;

    } else {

        return null; // since @Nullable
    }
}

Но когда я использую AndroidAnnotations в классе, наследующем этот фрагмент, для которого «какое-то условие» ложно, он не возвращает представление. Все просто пусто, и @AfterViews даже не вызывается.

Я также пробовал вместо возврата null:

...

} else {
    return super.onCreateView(inflater, container, savedInstanceState);
}

Я знаю, что должен позволить AndroidAnnotations обрабатывать инфляцию макета, как указано здесь: androidannotations @AfterViews не вызывает, а editText имеет значение null

Вот почему я возвращаю null или супер-метод в родительском фрагменте onCreateView ().

Что мне не хватает? Любые идеи?

Большое спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
91
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Трудно ответить без кода NavMenuStats, но я думаю, что ваша проблема в этом.

Я думаю, вы также добавили метод onCreateView в свой NavMenuStats, поэтому вы не позволяете AndroidAnnotations писать его за вас.

Попробуйте полностью удалить метод onCreateView вашим аннотированным классом @EFragment.

В этой ситуации это работает:

MainFragment

public class MainFragment extends Fragment{

    public boolean nullView = false;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        return nullView ? null : inflater.inflate(R.layout.fragment_main, container, false);
    }
}

SonFragment

@EFragment(R.layout.fragment_son)
public class SonFragment extends MainFragment {

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.nullView = true;
    }
}

Может быть, вы забыли добавить сгенерированный фрагмент сына с символом _ в конце?

Спасибо за ответ. Извините, я не могу опубликовать здесь большую часть кода. Но нет, у меня нет onCreateView () в NavMenuStats. Он использует onCreateView () из своего родительского класса. Я попытался переопределить его и вызвать супер-метод / оставить его пустым, но без радости. Есть ли другой способ игнорировать onCreateView из родительского фрагмента?

Luís Henriques 04.05.2018 17:53

Можете ли вы удалить его также из родительского фрагмента или он вам понадобится любой ценой? Я имею в виду, что вы также можете аннотировать родительский фрагмент и позволить AndroidAnnotations работать для вас также там. Может ли это быть возможным решением?

firegloves 04.05.2018 17:55

Это было мое первое решение: D Но, к сожалению, нет, я не могу его удалить.

Luís Henriques 04.05.2018 17:58

Ух ты. Большое спасибо. Дайте мне знать, если вам понадобится дополнительная информация.

Luís Henriques 04.05.2018 18:29

Я уже ответил :) дайте мне знать, если вы обнаружите свою проблему

firegloves 04.05.2018 18:30

Большой! Это сработало отлично. Я просто забыл добавить ребенка с "_" в конце адаптера. Не могу поверить, что упустил из виду, но я бы никогда не добился этого без вашего ответа. Спасибо.

Luís Henriques 04.05.2018 18:55

Другие вопросы по теме