使用@EViewGroup批注扩展ViewGroup

时间:2015-07-25 07:33:03

标签: android inheritance annotations viewgroup android-annotations

我正在尝试为具有android视图组和注释的Web开发人员实现一些非常常见的东西 我们的想法是让基本的ViewGroup具有自己的布局基础。像标题,内容和页脚 所有其他视图组具有相同的布局,但块内的不同内容必须扩展此基础ViewGroup 例如我的BaseViewGroup

@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 个答案:

答案 0 :(得分:0)

您还必须在子类中指定布局:@EViewGroup(R.layout.base_view_group)