गतिविधि में नहीं स्थानों में GetLayoutInflater () को कॉल करें


189

आयात करने की क्या आवश्यकता है या मैं गतिविधि के अलावा अन्य जगहों पर लेआउट इनफ्लोटर को कैसे कॉल कर सकता हूं?

public static void method(Context context){
    //this doesn't work the getLayoutInflater method could not be found
    LayoutInflater inflater = getLayoutInflater();
    // this also doesn't work 
    LayoutInflater inflater = context.getLayoutInflater();
}

मैं getLayoutInflaterकेवल गतिविधि में ही सक्षम हूं , क्या यह प्रतिबंध है? क्या होगा अगर मैं कस्टम डायलॉग बनाना चाहता हूं और मैं इसके लिए व्यू बढ़ाना चाहता हूं, या क्या होगा अगर मैं कस्टम व्यू के साथ टोस्ट मैसेज करना चाहता हूं, जो किसी सेवा से दिखाया गया हो, मेरे पास केवल उस सेवा से संदर्भ है जिसमें मेरी कोई गतिविधि नहीं है लेकिन मैं कस्टम संदेश दिखाना चाहता हूं।

मुझे कोड में उन स्थानों पर इनफ्लो की आवश्यकता है जो गतिविधि वर्ग में नहीं हैं।

मैं यह कैसे कर सकता हूँ ?

जवाबों:


396

आप इसे बाहर की गतिविधियों का उपयोग कर सकते हैं - आपको इसकी आवश्यकता है Context:

LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );

फिर अपने विभिन्न विजेट्स को पुनः प्राप्त करने के लिए, आप एक लेआउट को फुलाते हैं:

View view = inflater.inflate( R.layout.myNewInflatedLayout, null );
Button myButton = (Button) view.findViewById( R.id.myButton );

जुलाई 2014 तक ईडीआईटी

कैसे प्राप्त करने के बारे में डेविड का जवाबLayoutInflater वास्तव में मेरा (जो अभी भी मान्य है) की तुलना में अधिक सही है।


महान, लेकिन अब findViewById काम नहीं करता है, क्या आपके पास इसके बारे में कोई विचार है? inflater.inflate (R.layout.some_layout, (ViewGroup) findViewById (R.id.parent));
लुकप

nop, inflater.inflate () विधि में केवल एक इंट परम के साथ अतिभारित विधि नहीं है, लेकिन मुझे लगता है कि अगला एक शून्य हो सकता है।
लुकप

@kaspermoerch आपने यह क्यों कहा कि डेविड का जवाब अधिक सही है?
रोहन भाटिया

1
@ रोहन भाटिया डेविस के जवाब में मुझे जो भी करना है, कास्टिंग की आवश्यकता नहीं है। यदि getSystemServiceकुछ (बिना) कारण के कॉल किसी प्रकार की वस्तु को वापस नहीं करता है, LayoutInflaterतो मेरा कोड रनटाइम अपवाद का कारण होगा।
कास्परमोर्च

मेरे लिए काम किया। धन्यवाद
CodeFluid

260

या ...

LayoutInflater inflater = LayoutInflater.from(context);

5
बहुत देर से, लेकिन वास्तव में फ़ंक्शन से बेहतर उत्तर भी इस बात की पुष्टि करता है कि आपको वास्तव में एक फ़्लोटर वापस मिल गया है और अन्यथा एक त्रुटि फेंकता है - जो कोड में कहीं एक अशक्त पॉइंटर अपक्षय से निपटने के लिए बहुत आसान होगा। grepcode.com/file/repository.grepcode.com/java/ext/…
Raanan

38
इतना संक्षिप्त, बहुत भड़का
डेनियल आयटेकिन

@ डेविड इस उद्धरण का मतलब है कि कैस्परमोर्च का समाधान आपके मुकाबले बेहतर है? "इसका उपयोग कभी भी सीधे नहीं किया जाता है। इसके बजाय, getLayoutInflater () या getSystemService (क्लास) का उपयोग एक मानक LayoutInflater उदाहरण को पुनः प्राप्त करने के लिए करें जो पहले से ही वर्तमान संदर्भ तक झुका हुआ है और आपके द्वारा चल रहे डिवाइस के लिए सही तरीके से कॉन्फ़िगर किया गया है।" डेवलपर
.android.com/reference/android/view/LayoutInflater

@ TamásBolvári केवल और अधिक आसान और स्पष्ट है, वास्तव में आंतरिक कार्यान्वयन कैस्परमोर्च लेखन के समान है।
डेविड

11

या

View.inflate(context, layout, parent)


कोई बात नहीं ; हालाँकि, इस पद्धति के साथ, मैं बूलियन "अटोटोररूट" प्रदान नहीं कर सकता
डेनिसगेल

यह आवश्यकता पर आधारित है, अगर आपको संलग्नक की आवश्यकता नहीं है तो यह एक सुविधाजनक सहायक विधि है या अभिभावक के रूप में getRootView () पास करें।
प्रकाश नादर

9

संदर्भ वस्तु का उपयोग करके आप निम्नलिखित कोड से LayoutInflater प्राप्त कर सकते हैं

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

1
LayoutInflater.from(context).inflate(R.layout.row_payment_gateway_item, null);

1
आपको अपने कोड के साथ कुछ व्याख्यात्मक पाठ प्रदान करने के लिए प्रोत्साहित किया जाता है।
हंसहिरसे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.