Android-Annotations和继承

lig*_*igi 8 android android-annotations

我遇到了android-annotations和继承问​​题:

@EFragment(R.layout.fragment_foo)
public class TestBaseFragment {
    @AfterViews
    public void afterTestBaseFragmentViews() {
   }
}

@EFragment(R.layout.fragment_foo)
public class TestFragment extends TestBaseFragment {
    @AfterViews
    public void afterTestFragmentViews() {
   }
}
Run Code Online (Sandbox Code Playgroud)

产生:

public final class TestFragment_
    extends TestFragment
{
    ...

    private void afterSetContentView_() {
        afterTestFragmentViews();
        afterTestBaseFragmentViews();
    }
    ...
Run Code Online (Sandbox Code Playgroud)

如何在afterTestFragmentViews()之前确保调用afterTestBaseFragmentViews()?或者您可以指出任何描述如何使用AndroidAnnotations进行继承的文档吗?

Bas*_*der 11

这只是某种解决方法

使用抽象类:

@EFragment(R.layout.fragment_foo)
public abstract class TestBaseFragment {

    @AfterViews
    protected void afterTestBaseFragmentViews() {
        // do something
        afterView();
    }

    protected abstract void afterView();

}

@EFragment(R.layout.fragment_foo)
public class TestFragment extends TestBaseFragment {

    @Override
    protected void afterView() {
        // do something after BaseFragment did something
    }

}
Run Code Online (Sandbox Code Playgroud)

使用简单的子类化:

@EFragment(R.layout.fragment_foo)
public class TestBaseFragment {

    @AfterViews
    protected void afterTestBaseFragmentViews() {
        afterView();
    }

    public void afterView() {
        // do something
    }

}

@EFragment(R.layout.fragment_foo)
public class TestFragment extends TestBaseFragment {

    @Override
    public void afterView() { 
        super.afterView();
        // do something after BaseFragment did something
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望这就是你要找的东西.(未经测试 - 只是用记事本写的)

  • 方法```afterTestBaseFragmentViews```不应该是私有的.在这种情况下,AA无法访问此方法 (4认同)