2012-05-18 11 views
11

मेरे पास मेरा खुद का सार सार वर्ग है जो Activity वर्ग बढ़ाता है।मैनिफेस्ट में बेस गतिविधि कक्षा पंजीकृत करने की कोई आवश्यकता नहीं है?

public abstract class BaseActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(getLayoutResourceId()); 
    } 

    protected abstract int getLayoutResourceId(); 
} 

public class Activity1 extends BaseActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // do extra stuff 
    } 

    @Override 
    protected int getLayoutResourceId() { 
     return R.layout.layout_for_activity1; 
    } 
} 

मेरे आधार वर्ग BaseActivityManifest फ़ाइल में पंजीकृत नहीं है और मैं किसी भी त्रुटि नहीं मिलता है।

क्या यह एक समय बम है (मैनिफेस्ट में बेस क्लास पंजीकृत नहीं है) या यह वही तरीका होना चाहिए? क्या कोई समझा सकता है क्यों?

उत्तर

15

डॉक्स, प्रकट पर <activity> के अनुसार:

एक गतिविधि (एक गतिविधि उपवर्ग) कि आवेदन का दृश्य यूजर इंटरफेस का हिस्सा लागू करता है की घोषणा:। सभी गतिविधियों को मेनिफेस्ट फ़ाइल में तत्वों द्वारा दर्शाया जाना चाहिए। किसी भी है कि घोषित नहीं कर रहे हैं प्रणाली द्वारा नहीं देखा जाएगा और रन कभी नहीं होगा।

इस तरह इसके बारे में सोचो: यदि एक गतिविधि (किसी भी वर्ग या एक वर्ग है कि यह फैली कि Activity फैली) है कि आप अपने आवेदन में कुछ बिंदु पर, यह प्रकट में घोषित किए जाने की आवश्यकता पर नेविगेट जाएगा। भले ही आप उस गतिविधि तक पहुंचें। इसमें कक्षाएं शामिल नहीं हैं जो केवल Activity कक्षा का विस्तार करती हैं लेकिन आप सीधे नहीं पहुंच सकते हैं।

Source

+0

आपका उत्तर थोडा भ्रामक है। आप इसे एक टाइमबॉम्ब कहते हैं जो मेनिफेस्ट में बेसएक्टिविटी पंजीकृत नहीं करता है, फिर भी आप इसे पंजीकृत करने के लिए कहते हैं – dymmeh

+0

कोई चिंता नहीं। स्पष्टीकरण के लिए धन्यवाद :) – dymmeh

10

आप क्योंकि इसके एक नहीं आप इरादे में फोन लांच करने के लिए प्रकट में BaseActivity वर्ग रजिस्टर करने के लिए की जरूरत है।

उदाहरण के लिए

:

Intent i = new Intent(context, Activity1.class); 
startActivity(i); 

उपरोक्त कोड में, आप, नहींBaseActivity वर्ग Activity1 गतिविधि प्रकट में पंजीकृत क्योंकि आप इसे इरादे में उल्लेख कर रहे हैं की आवश्यकता है।

+1

^यह। जब तक आप वास्तव में बेसएक्टिविटी को अपने आप चलाने की योजना नहीं बनाते हैं, तो आपको केवल उन्हीं गतिविधियों को पंजीकृत करने की आवश्यकता होती है जो इसे विस्तारित कर रहे हैं। – dymmeh

+0

हां, ज़ाहिर है ... तार्किक रूप से * ठोस * वर्ग पंजीकृत होना चाहिए। – waqaslam

+0

डाउन-वोट के लिए कोई कारण? – waqaslam

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