【问题标题】:Android-Annotations and inheritanceAndroid-注解和继承
【发布时间】:2013-02-27 17:30:31
【问题描述】:

我在使用 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() {
   }
}

生成:

public final class TestFragment_
    extends TestFragment
{
    ...

    private void afterSetContentView_() {
        afterTestFragmentViews();
        afterTestBaseFragmentViews();
    }
    ...

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

【问题讨论】:

标签: android android-annotations


【解决方案1】:

这只是某种解决方法

使用抽象类:

@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
    }

}

使用简单的子类化:

@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
    }

}

我希望这就是您想要的。 (未测试 - 只是用记事本写的)

【讨论】:

  • 方法afterTestBaseFragmentViews 不应该是私有的。在这种情况下 AA 无法访问此方法
  • 如果 TestBaseFragment 有 ViewById 之类的注释怎么办?就我而言,在生成的类 TestFragment_ 中看不到这些注释。注释 Click 也是如此。
猜你喜欢
  • 2011-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2015-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多