2012-10-29 28 views
37

मैं संदर्भ से देखने या खोजने के लिए ViewById() प्राप्त करना चाहता हूँ? या इरादे से?एंड्रॉइड - संदर्भ से देखने के लिए कैसे?

मैं अपने प्रसारण रिसीवर में एक विशिष्ट दृश्य तक पहुंचने की कोशिश कर रहा हूं और ऑनसाइट के पैरामीटर संदर्भ और मंशा हैं।

ठीक है, मेरे पास एक कक्षा है और इसके भीतर मेरा प्रसारण रिसीवर है। अब, मैं प्रसारण रिसीवर को इससे अलग करने की कोशिश कर रहा हूं, लेकिन मुझे एक तरीका चाहिए ताकि मैं अपने अलग-अलग प्रसारण रिसीवर कक्षा से अपनी कक्षा के विचारों के साथ संवाद कर सकूं।

धन्यवाद।

उत्तर

5

अपने प्रसारण रिसीवर में आप एक्सएमएल संसाधन से एक रूट लेआउट मुद्रास्फीति के माध्यम से एक दृश्य के यहां पहुंच सकता है और उसके बाद findViewByid() के साथ इस रूट लेआउट से अपने सभी दृश्य ढूंढ:

View view = View.inflate(context, R.layout.ROOT_LAYOUT, null); 

अब आप के माध्यम से अपने विचारों का उपयोग कर सकते 'दृश्य' हैं और उन्हें अपने दृश्य प्रकार के लिए डाली:

myImage = (ImageView) view.findViewById(R.id.my_image); 
+0

क्या होना चाहिए मैं जड़ पैरामीटर पर रखा गया? – lorraine

+0

रूट पैरामीटर फुलाया पदानुक्रम का मूल दृश्य है। उपर्युक्त उदाहरण में मैंने दिखाया है कि एक दृश्य को कैसे बढ़ाया जा सकता है जो पहले से ही रूट है इसलिए आप इस पैरामीटर को गलत रख सकते हैं। यदि आपका फुलाया गया दृश्य रूट नहीं है, तो आप अपने मूल दृश्य को तीसरे पैरामीटर के रूप में रखते हैं। –

+3

क्या यह 'झूठी' के बजाय 'शून्य' नहीं होना चाहिए? – Roberto

43

एक संदर्भ के साथ शुरू, संबंधित गतिविधियों रूट दृश्य

View rootView = ((Activity)_context).Window.DecorView.FindViewById(Android.Resource.Id.Content); 
द्वारा किया जा सकता है

कच्चे एंड्रॉयड में यह कुछ इस तरह दिखाई चाहते हैं: इस

View v = rootView.findViewById(R.id.your_view_id); 
+3

याद रखें कि आपको 'v देखें v = rootView.findViewById (R.id.your_view_id); '' v देखें v = (देखें) rootView.findViewById (R.id।your_view_id); 'और वर्ग _View_ दृश्य का कोई व्युत्पन्न वर्ग हो सकता है। –

+1

यह कोशिश करते समय मुझे "कारण: java.lang.ClassCastException: android.app.Aplication को android.app.Activity पर नहीं डाला जा सकता है"। – drynyn

+2

@drynyn ऐसा इसलिए है क्योंकि यह उदाहरण माना जाता है कि संदर्भ के लिए एक गतिविधि पारित की जा रही है, जो एक सुरक्षित धारणा नहीं है। आप उदाहरण के लिए कीवर्ड का उपयोग यह जांचने के लिए कर सकते हैं कि कलाकार प्रदर्शन करने के लिए सुरक्षित है या नहीं। (उदाहरण के लिए google "exampleof java")। – eimmer

1

पहले उपयोग पर

View rootView = ((Activity)mContext).getWindow().getDecorView().findViewById(android.R.id.content) 

तो बस फोन findViewById इस:

LayoutInflater inflater = (LayoutInflater) Read_file.this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

Read file is current activity in which you want your context. 

View layout = inflater.inflate(R.layout.your_layout_name,(ViewGroup)findViewById(R.id.layout_name_id)); 

तो आप इस का उपयोग कर सकते लेआउट में कोई तत्व खोजने के लिए।

ImageView myImage = (ImageView) layout.findViewById(R.id.my_image); 
41

उदाहरण के लिए यदि आप किसी भी TextView पा सकते हैं:

TextView textView = (TextView) ((Activity) context).findViewById(R.id.textView1); 
+3

अच्छा जवाब। यह करने का 2015 तरीका है, उपर्युक्त तरीका बहुत अनावश्यक लगता है। –

0

क्यों तुम सिर्फ एक सिंगलटन का उपयोग नहीं करते?

import android.content.Context; 


public class ClassicSingleton { 
    private Context c=null; 
    private static ClassicSingleton instance = null; 
    protected ClassicSingleton() 
    { 
     // Exists only to defeat instantiation. 
    } 
    public void setContext(Context ctx) 
    { 
    c=ctx; 
    } 
    public Context getContext() 
    { 
     return c; 
    } 
    public static ClassicSingleton getInstance() 
    { 
     if(instance == null) { 
      instance = new ClassicSingleton(); 
     } 
     return instance; 
    } 
} 
फिर गतिविधि कक्षा में

:

private ClassicSingleton cs = ClassicSingleton.getInstance(); 

और गैर गतिविधि कक्षा में:

ClassicSingleton cs= ClassicSingleton.getInstance(); 
     Context c=cs.getContext(); 
     ImageView imageView = (ImageView) ((Activity)c).findViewById(R.id.imageView1);