2014-04-07 5 views
6

setContentView और LayoutInflater के बीच क्या अंतर है? और कस्टम alertbox में कस्टम toast और setContentView में inflater का उपयोग करने का कारण क्या है?Android: setContentView और LayoutInflater

+2

मुझे लगता है कि यहां आपके लिए एक अच्छा जवाब है http://stackoverflow.com/questions/17808177/difference-between-setcontentview-and-inflater –

उत्तर

1

setContentView() आमतौर पर एक गतिविधि लोड करने के लिए उपयोग किया जाता है। inflate केवल लेआउट ने व्यू क्लास ऑब्जेक्ट बनाया और यदि आवश्यक हो, तो setContentView (देखें)। setContentView ( के माध्यम से सामान्य गतिविधि) इंटरफ़ेस प्रदर्शित होता है, लेकिन लेआउट को नियंत्रित करने के लिए कैसे गैर-गतिविधि में काम करने के लिए सेट किया जाता है, जिसे LayoutInflater गतिशील लोडिंग की आवश्यकता होती है। उदाहरण के लिए जब आप स्पिनर के लिए एडाप्टर क्लास का उपयोग करते हैं तो आपको LayoutInflater का उपयोग करना होगा।

1

setContentView(): यह विधि आपके पृष्ठभूमि लेआउट को सेट करती है।

LoayoutInflater: यदि आप सूचीदृश्य और अपनी जरूरत के शो सूची 10 item.then layoutIflat का उपयोग शो 10 आइटम के लिए काम करते हैं लगता

inflater: यह, अपने Layou डिजाइन के लिए की जरूरत है layoutInflat के लिए मूल्य रखने

कस्टम टोस्ट: यह है कि आपकी स्ट्रिंग आउटपुट.custom टोस्ट का मतलब डिजाइन आउटपुट के लिए आपकी इच्छा है। स्टाइलिस्ट आउटपुट शो।

खेद भाई मैं भी alertbox.Thank नहीं पता था कि आप बहुत

1

setContentView भिन्न हो आंतरिक inflater का उपयोग करता है को प्राप्त करने के लिए यह सुविधा है। यह एक सुविधाजनक तरीका है, जो लेआउट को फुलाए जाने के लिए अभिभावक/रूट व्यू तत्व को असाइन करने की ज़िम्मेदारी लेगा। यह एक्शनबार भी शुरू करता है। Activity.java

public void setContentView(int layoutResID) { 
    getWindow().setContentView(layoutResID); 
    initActionBar(); 
} 

com/एंड्रॉयड/आंतरिक/नीति/impl/PhoneWindow.java

@Override 
public void setContentView(int layoutResID) { 
    if (mContentParent == null) { 
     installDecor(); 
    } else { 
     mContentParent.removeAllViews(); 
    } 
    mLayoutInflater.inflate(layoutResID, mContentParent); 
    final Callback cb = getCallback(); 
    if (cb != null && !isDestroyed()) { 
     cb.onContentChanged(); 
    } 
} 
अपने 2 प्रश्न के बारे में

, हम करते हैं उपयोग:

यहां Android स्रोत कोड है दोनों कस्टम टोस्ट और कस्टम अलर्ट संवाद में inflater। उदा। कस्टम टोस्ट निर्माण:

Toast toast = new Toast(getApplicationContext()); 
toast.setView(inflater.inflate(R.layout.custom_toast, 
(ViewGroup) findViewById(R.id.toast_layout_root))); 

उदा। कस्टम अलर्ट संवाद निर्माण:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
builder.setView(inflater.inflate(R.layout.dialog_signin, null)); 

चेतावनी संवाद के मामले में, हम फुलाया लेआउट के लिए जड़, के रूप में लेआउट आईडी 'कस्टम' alert_dialog.xml

में विनिर्दिष्ट साथ FrameLayout तत्व में जोड़ा जाता है प्रदान नहीं करते
15

आप से पहले कुछ चीजें समझने की जरूरत है,

Android में, प्रत्येक Activity एक ViewRoot और आम तौर पर एक Window, इसे से जुड़ी है। हालांकि, SurfaceView की अपनी खिड़की है। इसलिए, यदि Activity में SurfaceView है तो इसमें एक से अधिक विंडो होंगे।

यह गतिविधि स्क्रीन विंडो के लिए पूरी विंडो पर कब्जा करने के लिए उपयोग की जाती है। दृश्य इस विंडो से जुड़े हुए हैं। प्रत्येक खिड़की में एक सतह और सतह सतह पर आकर्षित करने के लिए Canvas का उपयोग करती है। खिड़की दृश्य सतह के मालिक से जुड़ा हुआ है।

मूल रूप से ViewRoot संग्रह और इनपुट भेजने के लिए के लिए जिम्मेदार है और View फोकस/महत्वपूर्ण घटनाओं के प्रबंधन के लिए जिम्मेदार है, CanvasonDraw() का उपयोग कर "ड्राइंग" ऑपरेशन के लिए केवल जिम्मेदार है।

setContentView(View) एक विधि विशेष रूप से Activity के लिए उपलब्ध है। आंतरिक रूप से यह Window के setContentView(View) पर कॉल करता है। यह विधि गतिविधि सामग्री को एक स्पष्ट दृश्य में सेट करती है। यह दृश्य सीधे गतिविधि के दृश्य पदानुक्रम में रखा गया है। इस फ़ंक्शन को कॉल करना विंडो की विभिन्न विशेषताओं में "ताले" है जो इस बिंदु से आगे नहीं बदला जा सकता है। इसलिए इसे केवल एक बार कहा जाता है।

LayoutInflater लेआउट एक्सएमएल फ़ाइल को इसके संबंधित दृश्य ऑब्जेक्ट्स में तुरंत चालू करने के लिए उपयोग किया जाता है। असल में उद्देश्य आवश्यकता के आधार पर रनटाइम पर दृश्य ऑब्जेक्ट्स बनाना है। सर्वश्रेष्ठ उदाहरण AdapterViewsListView, Spinner इत्यादि है, जहां रिकॉर्ड्स की संख्या के आधार पर रन रिकॉर्ड पर सिंगल रिकॉर्ड से संबंधित एकल दृश्य वस्तु बनाई जाती है।

Toast के मामले में, LayoutInflater का उपयोग किया जाता है यदि बच्चे के दृश्य को गतिशील रूप से बदल दिया जा रहा है। रन टाइम पर छवि बदलना। यदि बच्चे के विचारों में कोई बदलाव नहीं किया जाता है तो टोस्ट के लेआउट व्यू को सेट करने के लिए टोस्ट के setView(View) को पर्याप्त रूप से पर्याप्त किया जाता है।

ToastAlertDialog के साथ है यदि आप ध्यान से देखते हैं।

उम्मीद है कि यह आपकी मदद करता है।

+0

इससे मदद मिली, धन्यवाद। लेकिन एक नौसिखिया होने के नाते मुझे और अधिक जानने की जरूरत है। – user3505180

+0

ऐसे उत्तरों मेरे लिए दुर्लभ हैं। धन्यवाद! –

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