2011-11-30 16 views
32

में गतिविधि का विस्तार नहीं करता है मेरे पास एक कक्षा है जो वर्तमान में गतिविधि का विस्तार कर रही है और मेरे पास खोजने के लिए विधियां हैं ViewById, ArrayAdapter आदि मैं इसे एक स्वतंत्र वर्ग में बदलना चाहता हूं लेकिन सभी उपरोक्त विधियां बन गईं अपरिभाषित। समस्या क्या है? कक्षाओं को आयात नहीं करना चाहिए पर्याप्त? उदाहरण के लिए, मैं android.view आयात करता हूं। FindViewById के लिए देखें लेकिन यह अभी भी कोई फर्क नहीं पड़ता है। कृपया सलाह दें।एक कक्षा में findviewbyid का उपयोग करके जो एंड्रॉइड

उत्तर

59

आप अपनी गतिविधि का उदाहरण आपके द्वितीय श्रेणी के लिए निर्माता पर इस तरह से पारित करना चाहिए

MyClass instance = new MyClass(this); 

और अपने दूसरे वर्ग में, निर्माता इस तरह होगा:

public class MyClass { 

public Activity activity; 
//.... other attributes 

public MyClass(Activity _activity){ 

    this.activity = _activity; 
//other initializations... 

} 
} 

और फिर जब तुम +०१२३२३६७७६३ उपयोग करना चाहते हैंविधि, तो आप इस तरह कर सकते हैं:

EditText txt = (EditText)this.activity.findViewById(R.id.txt); 
+1

यह काम नहीं करता है। findViewById केवल गतिविधि पर ही कहा जा सकता है, संदर्भ पर नहीं। मैंने आपके दृष्टिकोण की कोशिश की लेकिन यह अभी भी मुझे त्रुटियां दे दी। – Namratha

+0

तो मेरा संपादन देखें, बस संदर्भ के गतिविधि intstead का उदाहरण पास करें :) – Houcine

+0

ठीक है, मैंने ऐसा किया :) जब मैं गतिविधि ऑब्जेक्ट पर findViewById को कॉल करता हूं, तो सूची दृश्य जिसे मैं ढूंढने की कोशिश कर रहा हूं वह शून्य है। क्या ऐसा इसलिए है क्योंकि मैंने XML फ़ाइल के लिए setContentView का उपयोग नहीं किया है जिसमें ListView शामिल है, पहले? – Namratha

6

findViewById, Activity कक्षा की गैर स्थिर सार्वजनिक विधि है तो यह केवल एक Activityवस्तु के लिए उपलब्ध हो। इसलिए, आयात करें android.view.View और android.app.Activity इसे उपलब्ध नहीं कराएगा। इसे उपलब्ध कराने के लिए, आप Actvity ऑब्जेक्ट को पास कर सकते हैं - आमतौर पर आपकी गतिविधि में this बिंदु। हालांकि, ध्यान दें कि आपको हमेशा यूआई थ्रेड में अपना दृश्य अपडेट करना चाहिए। अपने Activity Instanciate में अपनी कक्षा इस तरह

:

+0

ठीक है मैं समझता हूँ कि क्यों यह उपलब्ध नहीं है, लेकिन दृश्य वर्ग की एक विधि findViewById नहीं है? आप यह भी समझा सकते हैं कि हमें हमेशा यूआई थ्रेड में अपना दृश्य क्यों अपडेट करना चाहिए (क्या आप मुख्य गतिविधि का जिक्र कर रहे हैं?)? – Namratha

8

अगर आप किसी भी समारोह है कि Activity तो केवल एक चीज आप की आवश्यकता के अंतर्गत आता है कॉल करना चाहते हैं Activity के संदर्भ है।

उदाहरण के लिए।

class A extends Activity{ 

Context ctx; 
void oncreate(Bundle b) 
ctx = this; 

B bob = new B(ctx); 
} 
} 

यहाँ वर्ग बी

Class B 
{ 
B(Activity a) 
{ 
a.anyFunctionOfActivity(); 
} 

} 
+1

यह एक AsyncTask –

+0

@IgorGanapolsky में यहां काम नहीं करेगा। AsyncTask में यह काम करने के लिए क्या किया जाना चाहिए? –

0

है निम्न प्रयास करें:

public static View getLayoutByRes(@LayoutRes int layoutRes,@Nullable ViewGroup viewGroup) 
{ 
    final LayoutInflater factory = getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    return factory.inflate(layoutRes, viewGroup); 
} 

TextView tv = (TextView) getLayoutByRes(R.layout.xxx ,Null).findViewById(R.id.editd); 
संबंधित मुद्दे