8

私は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 で継承を行う方法を説明しているドキュメントを教えてもらえますか?

4

1 に答える 1

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
    }

}

これがあなたが探していたものであることを願っています。(テストされていません-メモ帳に書かれているだけです)

于 2013-02-27T18:32:31.913 に答える