2013-02-27 67 views
8

我有Android的注释和继承的麻烦:Android的注解和继承

@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(); 
    } 
    ... 

我怎么能确保afterTestBaseFragmentViews()被afterTestFragmentViews之前称为() ? 或者你能指出我的任何文档描述如何使用AndroidAnnotations继承?

+0

https://github.com/androidannotations/androidannotations/issues/810#issuecomment-31218529 – 2016-11-07 21:43:03

回答

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 
    } 

} 

使用简单的子类:

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

} 

我希望这是你所期待的。 (未测试 - 只是写在记事本)

+4

方法'''afterTestBaseFragmentViews'''不应该是私人的。在这种情况下,AA无法访问此方法 – ruX 2013-06-05 17:39:48

+0

如果TestBaseFragment具有像ViewById这样的注释,该怎么办?在我的情况下,在生成的类TestFragment_中看不到这些注释。注释相同单击。 – 2016-03-08 10:41:52