Я пытаюсь реализовать что-то очень распространенное для веб-разработчиков с андроидами и аннотациями.
Идея состоит в том, чтобы иметь базовый 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 ресурсы в методах шаблона. А чем в унаследованном конкретном классе также используются аннотации для поиска вида и других вещей.
У меня есть ошибка, потому что мой унаследованный класс не аннотируется, но если его аннотировать, он будет разбит, потому что я должен предоставить макет в аннотации.
Возможно ли иметь что-то вроде описанного выше?
Спасибо всем заранее.
Примечание: вы можете использовать '@ SystemService' для инъекции' LayoutInflater'. – WonderCsabo