2013-02-27 15 views
8

sto avendo problemi con Android annotazioni e l'eredità:Android-annotazioni e l'ereditarietà

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

genera:

public final class TestFragment_ 
    extends TestFragment 
{ 
    ... 

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

come posso fare in modo che afterTestBaseFragmentViews() viene chiamato prima afterTestFragmentViews() ? Oppure puoi indicarmi qualsiasi documento che descrive come eseguire l'ereditarietà con AndroidAnnotations?

+0

https://github.com/androidannotations/androidannotations/issues/810#issuecomment-31218529 –

risposta

11

E 'solo una sorta di soluzione

Utilizzando una classe astratta:

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

} 

utilizzando semplici sottoclassi:

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

} 

Spero che questo sia quello che stavi cercando. (Non testato - appena scritto nel blocco note)

+4

metodo '' 'afterTestBaseFragmentViews''' non dovrebbe essere privato. In questo caso AA non può accedere a questo metodo – ruX

+0

e se TestBaseFragment ha annotazioni come ViewById? Nel mio caso, queste annotazioni non sono viste nella classe generata TestFragment_. Lo stesso per l'annotazione Click. –