2013-02-27 20 views
8

मैं 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 के साथ विरासत कैसे करें?

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

} 

सरल उपवर्गीकरण का उपयोग करना::

+0

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

उत्तर

11

यह सिर्फ वैकल्पिक हल

किसी प्रकार का एक सार वर्ग का उपयोग करना है

@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

विधि '''TestBaseFragmentViews''' निजी नहीं होना चाहिए। इस मामले में एए इस विधि तक नहीं पहुंच सकता – ruX

+0

क्या होगा यदि TestBaseFragment में ViewById जैसे एनोटेशन हैं? मेरे मामले में, ये एनोटेशन जेनरेट क्लास TestFragment_ में नहीं देखे जाते हैं। एनोटेशन के लिए वही क्लिक करें। –

संबंधित मुद्दे