我在使用AndroidAnnotations建立 Activity 时遇到了一些麻烦。
我有一个名为TemplateActivity的父 Activity :

@EActivity(R.layout.activity_template)
@NoTitle
public class TemplateActivity extends Activity
{
    // some views
    // ...
    @ViewById(R.id.main_framelayout)
    FrameLayout mainFrameLayout;

    @AfterViews
    public void postInit()
    {
        Log.d("DEBUG", "postInit"); // never called, strange...
    }

    public void setMainView(int layoutResID)
    {
        mainFrameLayout.addView(LayoutInflater.from(this).inflate(layoutResID, null));
    }
}

在第二个 Activity 中,我想用这样的注释器布局xml填充mainFrameLayout:
@EActivity
public class ChildActivity extends TemplateActivity
{
    @Override
    public void postInit()
    {
        super.postInit();

        setMainView(R.layout.activity_child_one);
    }
}

当我想要startActivity时,我的ChildActivity为空白,并且从未调用postInit。
谁能告诉我怎么了?谢谢你提前。

最佳答案

父类中的注释将导致具有指定布局的类TemplateActivity_。子类将继承该父类的“常规”内容,但具有其自己的AA子类(ChildActivity_)。因此,您还应该指定要在其中使用的布局。只需查看生成的类,看看那里发生了什么。

AA的工作原理是为带注释的类(例如TemplateActivity_扩展TemplateActivity)生成一个新的子类,其中包含实现注释结果所需的代码。例如,在此类中,onCreate()方法将实例化所需的布局,用@Background注释的方法将被另一个在后台线程中调用原始方法的实现覆盖。 AndroidAnnotations在运行时并没有真正执行任何操作,可以在生成的类中看到所有内容,只需查看.apt_Generated文件夹(或生成类的位置)即可。如果它不能完全满足您的要求,这也可能会有所帮助,因为您可以仅查看它的功能并按照需要的方式自己进行操作。

在您的情况下,继承层次结构是这样的:

TemplateActivity (with annotations)
L--> TemplateActivity_ (with generated code for the layout)
L--> ChildActivity (your other class, no generated code)
     L--> ChildActivity_ (with code generated for the annotations in ChildActivity)

Afaik并非所有注释都传递给子类。

关于android - AndroidAnnotations的继承 Activity ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18563650/

10-09 07:28