0

Я пытаюсь реализовать что-то очень распространенное для веб-разработчиков с андроидами и аннотациями.
Идея состоит в том, чтобы иметь базовый ViewGroup, который имеет свой собственный макет. Как заголовок, содержание и нижний колонтитул.
Все остальные группы представлений, которые имеют один и тот же макет, но различный контент внутри блоков, должны расширить эту базу ViewGroup.
Например мой BaseViewGroupРасширение ViewGroup с аннотацией @EViewGroup

@EViewGroup(R.layout.base_view_group) 
public abstract class BaseViewGroup extends RelativeLayout { 
    private final LayoutInflater mLayoutInflater; 
    @ViewById 
    public RelativeLayout rlHeader; 
    @ViewById 
    public RelativeLayout rlFooter; 
    @ViewById 
    public RelativeLayout rlScrollMain; 

    // Template methods for inflating dialog 
    public abstract int getHeaderViewId(); 

    public abstract int getFooterViewId(); 

    public abstract int getScrollMainViewId(); 

    public CDialogBase(DialogChain dialogChain, Context context) { 
     super(context); 
     mLayoutInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @AfterViews 
    void afterViews() { 
     rlHeader.addView(mLayoutInflater.inflate(getHeaderViewId(), rlHeader, false)); 
     rlScrollMain.addView(mLayoutInflater.inflate(getScrollMainViewId(), rlHeader, false)); 
     rlFooter.addView(mLayoutInflater.inflate(getFooterViewId(), rlFooter, false)); 
    } 
} 

И когда нам нужно concreate класс, мы должны расширить и внедрить методы шаблона.

// @EViewGroup общественный класс ConcreteViewGroup расширяет BaseViewGroup {

@ViewById 
    TextView textView; 

    @ViewById 
    Button button; 

    @Override 
    public int getHeaderViewId() { 
     return R.layout.concrete_header; 
    } 

    @Override 
    public int getFooterViewId() { 
     return R.layout.concrete_footer; 
    } 

    @Override 
    public int getScrollMainViewId() { 
     return R.layout.concrete_main; 
    } 

    @AfterViews 

    @Click 

    @Click 
    ...... 
} 

Поэтому мне нужно расширить базу ViewGroup и предоставить concreate ресурсы в методах шаблона. А чем в унаследованном конкретном классе также используются аннотации для поиска вида и других вещей.
У меня есть ошибка, потому что мой унаследованный класс не аннотируется, но если его аннотировать, он будет разбит, потому что я должен предоставить макет в аннотации.

Возможно ли иметь что-то вроде описанного выше?
Спасибо всем заранее.

+1

Примечание: вы можете использовать '@ SystemService' для инъекции' LayoutInflater'. – WonderCsabo

ответ

0

Вы также должны указать макет в подклассе: @EViewGroup(R.layout.base_view_group).

+0

Не работает, насколько я знаю, он найдет только объявления в объявленной '@ EViewGroup', но в унаследованном классе я передаю заголовок, нижний колонтитул и содержимое во время выполнения – CROSP

+0

Да, это проблема. Вы можете раздуть заголовок и т. Д. В onCreate, но таким образом вы не можете использовать введенные представления. Это плохой цикл. Или вы можете вызывать уведомитель вида вручную, как вы можете видеть в сгенерированном коде. Но это не очень хорошая идея. – WonderCsabo

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