findViewByID रिटर्न शून्य


252

सबसे पहले: हाँ, मैंने इस विषय पर अन्य सभी सूत्र पढ़े। और न केवल इस साइट से ... (आप देखें, मैं थोड़ा निराश हूं)

उनमें से ज्यादातर एक्सएमएल फ़ाइल में android:idकेवल के बजाय उपयोग करने की सलाह के साथ आते हैं id। मैंने किया।

दूसरों से, मैंने सीखा, कि View.findViewByIdअलग से काम करता है Activity.findViewById। मैंने उसे भी संभाला।

मेरे में location_layout.xml, मैं उपयोग करता हूं:

<FrameLayout .... >
    <some.package.MyCustomView ... />

    <LinearLayout ... >
        <TextView ...
            android:id="@+id/txtLat" />
        ...
    </LinearLayout>
</FrameLayout>

अपनी गतिविधि में मैं:

...
setContentView( R.layout.location_layout );

और मेरे कस्टम व्यू क्लास में:

... 
TextView tv = (TextView) findViewById( R.id.txtLat );

जो लौटता है nullऐसा करने से, मेरी गतिविधि ठीक काम करती है। तो शायद यह अंतर Activity.findViewByIdऔर View.findViewByIdमतभेदों के कारण है । इसलिए मैंने स्थानीय रूप से कस्टम्स व्यू कंस्ट्रक्टर को दिए गए संदर्भ को संग्रहीत किया और कोशिश की:

...
TextView tv = (TextView) ((Activity) context).findViewById( R.id.txtLat );

जो लौट आया null

फिर, मैंने ViewGroupइसके बजाय विस्तार करने के लिए अपने कस्टम दृश्य को Viewबदल दिया और अपने कस्टम दृश्य के प्रत्यक्ष बच्चे location_layout.xmlहोने के लिए बदल दिया TextView, ताकि एView.findViewById चाहिए के रूप में काम करना चाहिए। Suprise: यह कुछ भी हल नहीं किया।

तो क्या मैं गलत कर रहा हूँ बिल्ली?

मैं किसी भी टिप्पणी की सराहना करता हूँ।


6
यदि प्रोजेक्ट दूषित भी है, तो यह हो सकता है। मैंने इसे प्रोजेक्ट की सफाई करके तय किया
पचेरियर

1
गलत संदर्भ दृश्य पारित धन्यवाद
izzy

1
@Pacerier धन्यवाद। इससे मेरी समस्या हल हो गई। मुझे Xamarin में एंड्रॉइड प्रोग्रामिंग से नफरत करना शुरू होता है)
आर्टिकॉम

@ स्पेसर "क्लीन प्रोजेक्ट" ने मेरी समस्या को भी हल कर दिया। ऐसा लगता है कि ड्रॉपबॉक्स ने परियोजना को दूषित कर दिया।
कोहकी ममेतानी

जवाबों:


271

जो शून्य है

संभवतः क्योंकि आप इसे बहुत जल्दी बुला रहे हैं। तक प्रतीक्षा करें onFinishInflate()यहां एक नमूना परियोजना है जो Viewअपनी सामग्री तक पहुंचने वाले एक कस्टम का प्रदर्शन करती है ।


67
हे भगवान! खिचड़ी भाषा का मानना ​​है कि मैं कुछ तुच्छ दिनों पर दिन बिताता हूं। मैंने खोज के दृश्य के ऊपर setContentView () स्थानांतरित कर दिया और कॉल () किया और उसने छल नहीं किया। धन्यवाद!
एजेंटक्रीरी

2
@ क्या यह सही प्रोजेक्ट है? मुझे नहीं में onFinishInflate कहीं भी देख पा रहे हैं github.com/commonsguy/cw-advandroid/tree/master/Animation/...
likejudo

1
@likejiujitsu: यह 2010 में वापस आ गया है हो सकता है। मैंने एक नई परियोजना के लिए लिंक को अद्यतन किया है onFinishInflate()
कॉमन्सवेयर

3
मेरे पास मेरा setContentView findViewById से पहले कॉल किया गया है और यह अभी भी अशक्त है। मैं एक EditText का उल्लेख कर रहा हूं
नियॉन वॉर

1
हमेशा निश्चित GitHub से लिंक करें (जैसे github.com/commonsguy/cw-omnibus/tree/… ) और कभी भी repos या rebase डिलीट न करें ;-)
Ciro Santilli 郝海东 病 病 事件 法轮功

145

संभवतः, आप कॉल करने findViewByIdसे पहले कॉल कर रहे हैं setContentView? अगर ऐसा है, तो findViewById AFTER कॉलिंग का प्रयास करेंsetContentView


1
इस तरह की एक आसान गलती है, लेकिन दुर्भाग्य से यह वही है जो मैंने किया था। डिबगर का कोई उपयोग नहीं है क्योंकि यह कहा जाता है कि त्रुटि मेरे नए इरादे में थी वास्तविक वास्तविक गतिविधि में नहीं जिसे मैं बुला रहा था। धन्यवाद!
edude05

6
वास्तव में मेरे पास यह त्रुटि थी क्योंकि मैं setContentView को गलत दृश्य की ओर इशारा कर रहा था ... दुर्भाग्य से संकलक इस प्रकार की त्रुटि नहीं पकड़ता है।
हीटफैनजॉन

हां, मैंने गलती से setContentView हटा दिया है और समझ में नहीं आया कि मेरा प्रोग्राम क्रश क्यों होने लगा।
रोनेन फिस्टिंगर

100

सुनिश्चित करें कि आपके पास विभिन्न स्क्रीन घनत्वों के लिए आपके लेआउट के कई संस्करण नहीं हैं। मौजूदा लेआउट में एक नई आईडी जोड़ते समय मैं एक बार इस समस्या में चला गया था, लेकिन एचडीपीआई संस्करण को अपडेट करना भूल गया। यदि आप लेआउट फ़ाइल के सभी संस्करणों को अपडेट करना भूल जाते हैं तो यह कुछ स्क्रीन घनत्वों के लिए काम करेगा लेकिन अन्य नहीं।


8
धन्यवाद! वह यह था। (मेरे मामले में मेरे पास विभिन्न एंड्रॉइड संस्करण के लिए कई संस्करण हैं)। मैं हर समय इसके बारे में भूल जाता हूं, हालांकि मैं हर लेआउट फ़ाइल के ऊपर और नीचे एक विशाल टिप्पणी करता हूं। काश ऐसा होने पर कंपाइलर कोई त्रुटि या बड़ी चेतावनी देता।
तैतक

डिंग डिंग डिंग, बहुत बहुत धन्यवाद! इस लोल के ऊपर मेरे दिमाग को झुका रहा था
Zach

21

यदि आप कस्टम दृश्य में गलत सुपर कंस्ट्रक्टर कहते हैं, तो FindViewById अशक्त हो सकता है। आईडी टैग अट्रैक्शन का हिस्सा है, इसलिए यदि आप अट्रैक्शन को नजरअंदाज करते हैं, तो आप आईडी को हटा देते हैं।

यह गलत होगा

public CameraSurfaceView(Context context, AttributeSet attrs) {
        super(context);
}

यह सही है

public CameraSurfaceView(Context context, AttributeSet attrs) {
        super(context,attrs);
}

1
थैंक यू यू सर! इतना लापरवाह मैं हूँ, मुझे भी शक था कि मेरी आईडीई के साथ कुछ गड़बड़ है। अपने जवाब को पूरा करने के लिए कितना भाग्यशाली है।
इफेक्टिवमैटिक्स

जब मैंने अपना कस्टम दृश्य बनाया तो मैंने यह गलती की। धन्यवाद, repkap11
एंड्रयू एफ।

15

मेरे मामले में, मेरे प्रोजेक्ट में 2 एक्टिविटीज थीं, main.xmlऔर main2.xml। शुरुआत से, main2की एक प्रति था main, और सब कुछ, अच्छी तरह से काम जब तक मैं नया जोड़ा TextViewकरने के लिए main2है, तो R.id.textview1अनुप्रयोग के आराम के लिए उपलब्ध हो गया। तब मैंने इसे मानक कॉलिंग द्वारा लाने की कोशिश की:

TextView tv = (TextView) findViewById( R.id.textview1 );

और यह हमेशा शून्य था। यह पता चला है, कि onCreateकंस्ट्रक्टर में मैं नहीं main2, बल्कि दूसरा था। मैं था:

setContentView(R.layout.main);

के बजाय

setContentView(R.layout.main2);

मैंने यहां आने के बाद, साइट पर देखा।


14

क्लासिक कारणों के साथ, अन्यत्र उल्लेख किया गया है:

  • सुनिश्चित करें कि आप बुलाया गया है setContentView()से पहलेfindViewById()
  • सुनिश्चित करें कि idआप चाहते हैं कि आपके द्वारा दिए गए दृश्य या लेआउट में हैsetContentView()
  • सुनिश्चित करें कि idअलग-अलग लेआउट में गलती से डुप्लिकेट नहीं है

वहाँ एक है जो मैं मानक लेआउट में कस्टम विचारों के लिए मिला हूं, जो प्रलेखन के खिलाफ जाता है:

सिद्धांत रूप में आप एक कस्टम दृश्य बना सकते हैं और इसे एक लेआउट में जोड़ सकते हैं ( यहां देखें )। हालांकि, मैंने पाया है कि ऐसी स्थितियों में, कभी-कभी idविशेषता लेआउट में सभी विचारों को छोड़कर कस्टम लोगों के लिए काम करती है। मेरे द्वारा उपयोग किया जाने वाला समाधान है:

  1. प्रत्येक कस्टम दृश्य FrameLayoutको उसी लेआउट गुणों के साथ बदलें, जैसा कि आपके पास कस्टम दृश्य है। इसे एक उपयुक्त idकहो, कहो frame_for_custom_view
  2. इन onCreate:

    setContentView(R.layout.my_layout);
    FrameView fv = findViewById(R.id.frame_for_custom_layout);
    MyCustomView cv = new MyCustomView(context);
    fv.addView(cv);

    जो कस्टम दृश्य को फ़्रेम में रखता है।


इससे मुझे मदद मिली: "सुनिश्चित करें कि आप जो आईडी चाहते हैं, वह उस दृश्य या लेआउट में है, जो आपने setContentView () को दिया है।" जब यह एक सबव्यू हो तो क्या करें? जनक दृश्य प्राप्त करने की कोशिश की, उसके बाद parentView.findById () करें, लेकिन यह अभी भी अशक्त है
NaturalBornCamper

@naturalborncamper यदि आप उदाहरण कोड के साथ एक अलग प्रश्न पोस्ट करते हैं तो मैं इसे देखूंगा।
नील टाउनसेंड

धन्यवाद नील, मैं पहले से ही तैनात हैं और इसलिए मैं एक अलग रणनीति का इस्तेमाल किया था किसी को यह करने के लिए एक बेहतर तरीका बताया है, हालांकि यह वास्तव में काम नहीं कर रहा है कि यह कैसे किया जाना चाहिए: stackoverflow.com/questions/47955376/...
NaturalBornCamper


6

ExpandableListView का उपयोग करने वालों के लिए एक उत्तर और यह शीर्षक के आधार पर इस प्रश्न में चलता है।

मेरे पास यह त्रुटि थी कि मैं अपने बच्चे और टेक्स्ट व्यूज़ में टेक्स्ट व्यू के साथ काम करने का प्रयास करूं और एक्सपेंडेबल लाइस्ट व्यू कार्यान्वयन के हिस्से के रूप में।

आप getChildView () और getGroupView () विधियों के अपने कार्यान्वयन में निम्नलिखित की तरह कुछ का उपयोग कर सकते हैं।

        if (convertView == null) {
            LayoutInflater inflater =  (LayoutInflater) myContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.child_layout, null);
        }

मुझे यह यहां मिला ।


5

मैं एंड्रॉइड / एक्लिप्स के लिए बहुत नया हूं, गलती से मैंने activity_main.xmlइसके बजाय यूआई सामान जोड़ा fragment_main.xml। कुछ घंटे लगे मुझे पता लगाने के लिए ...


5

एफडब्ल्यूआईडब्ल्यू, मैं यह नहीं देखता कि किसी ने भी इसे उसी तरह से हल किया है जैसा मुझे चाहिए था। संकलित समय पर कोई शिकायत नहीं है, लेकिन मैं क्रम में एक अशक्त दृश्य देख रहा था, और उचित क्रम में चीजों को बुला रहा था। यही है, setContentView () के बाद findViewById ()। समस्या यह है कि मेरे विचार को content_main.xml में परिभाषित किया गया है, लेकिन मेरी गतिविधि_main.xml में, मुझे इस एक कथन की कमी है:

<include layout="@layout/content_main" />

जब मैंने कहा कि activity_main.xml में, कोई और नहीं NullPointer।


एक टुकड़ा चिपकाने के साथ समस्या यह है कि आप कभी-कभी कुछ चीजों को बदलने के लिए भूल जाते हैं ... उनमें से एक को बढ़ाने के लिए सही लेआउट होना। धन्यवाद!
पाब्लो क्यूमे

3

मुझे भी बिल्कुल यही समस्या है। मैं एक तृतीय-पक्ष लाइब्रेरी का उपयोग कर रहा था, जो आपको ग्रिड व्यू के लिए उनके एडॉप्टर को ओवरराइड करने की अनुमति देता है और प्रत्येक ग्रिड व्यू सेल के लिए अपना स्वयं का लेआउट निर्दिष्ट करने के लिए।

मुझे अंततः एहसास हुआ कि क्या हो रहा था। ग्रहण अभी भी GridView में प्रत्येक सेल के लिए लाइब्रेरी के लेआउट xml फ़ाइल का उपयोग कर रहा था, भले ही इसने इसका कोई संकेत नहीं दिया हो। मेरे कस्टम अडैप्टर में, यह संकेत देता था कि यह रनटाइम के दौरान भी अपने स्वयं के प्रोजेक्ट से xml संसाधन का उपयोग कर रहा था, यह नहीं था।

इसलिए मैंने जो किया वह यह सुनिश्चित करने के लिए था कि मेरे कस्टम xml लेआउट और आईडी लाइब्रेरी में बैठे लोगों से अलग थे, इस परियोजना को साफ किया और फिर यह सही कस्टम लेआउट पढ़ना शुरू कर दिया जो मेरे प्रोजेक्ट में थे।

संक्षेप में, यदि आप किसी तृतीय-पक्ष लाइब्रेरी के एडाप्टर को ओवरराइड कर रहे हैं और एडॉप्टर का उपयोग करने के लिए अपने स्वयं के लेआउट xml को निर्दिष्ट कर रहे हैं तो सावधान रहें। यदि आपके प्रोजेक्ट के अंदर आपके लेआउट का फ़ाइल नाम वैसा ही है जैसा कि लाइब्रेरी में है, तो आप वास्तव में मुश्किल से ढूंढने वाले बग का सामना कर सकते हैं!


3

मेरे विशेष मामले में, मैं एक सूची दृश्य में पाद जोड़ने की कोशिश कर रहा था। ऑनक्रीट () में निम्न कॉल अशक्त लौट रहा था।

TextView footerView = (TextView) placesListView.findViewById(R.id.footer);

इसे आईडी दृश्य द्वारा हल करने के बजाय फुटर व्यू को बदलने के लिए इस समस्या को हल किया गया।

View footerView = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.footer_view, null, false);

2

मेरे मामले में, मैं ExpandableListView का उपयोग कर रहा था और मैंने सेट किया था android:transcriptMode="normal"। इससे विस्तार योग्य समूह में कुछ बच्चे गायब हो रहे थे और जब भी मैं सूची को स्क्रॉल करता था तो मुझे NULL अपवाद मिलता था।


2

मेरे लिए मेरे पास एक ही गतिविधि के लिए दो xml लेआउट थे - एक पोर्ट्रेट मोड में और एक लैंडस्केप में। बेशक मैंने लैंडमार्क xml में एक ऑब्जेक्ट की आईडी बदल दी थी, लेकिन पोर्ट्रेट संस्करण में एक ही बदलाव करना भूल गया था। सुनिश्चित करें कि यदि आप एक को बदलते हैं तो आप दूसरे xml के समान करते हैं या जब तक आप इसे चलाते / डिबग नहीं करते हैं, तब तक आपको एक त्रुटि नहीं मिलेगी और यह उस आईडी को नहीं खोज सकता है जिसे आपने नहीं बदला। अरे गूंगा भूलों, तुम मुझे इतना दंड क्यों देना चाहिए?



2

उपरोक्त समाधानों के अलावा आप सुनिश्चित करें कि
tools:context=".TakeMultipleImages" लेआउट में mainfest.xml फ़ाइल में समान मूल्य है:
android:name=".TakeMultipleImages"समान गतिविधि तत्व के लिए। यह तब होता है जब नई गतिविधि बनाने के लिए कॉपी और पेस्ट का उपयोग किया जाता है


2

मेरे पास भी यही समस्या है, लेकिन मुझे लगता है कि आप लोगों के साथ इसके लायक साझेदारी है। यदि आपको कस्टम लेआउट में ViewById ढूंढना है, उदाहरण के लिए:

public class MiniPlayerControllBar extends LinearLayout {
    //code
}

आपको कंस्ट्रक्टर में दृश्य नहीं मिल सकता है। व्यू बढ़ाने के बाद आपको findViewById को कॉल करना चाहिए। उनकी एक विधि है जिसे आप ओवरराइड कर सकते हैंonFinishInflate


2

बस अपने विशिष्ट मामले को यहां फेंकना चाहता था। किसी को नीचे लाइन में मदद कर सकते हैं।

मैं इस तरह से अपने Android UI XML में निर्देश का उपयोग कर रहा था:

जनक दृश्य:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="home_phone"
    android:background="@color/colorPrimary">

    ...

    <include
        layout="@layout/retry_button"
        android:visibility="gone" />

बच्चे का दृश्य (पुनः प्रयास करें)

<com.foo.RetryButton
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/retry"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:layout_width="100dp"
    android:layout_height="140dp">

.findViewById (R.id.retry) हमेशा शून्य हो जाएगा। लेकिन, अगर मैंने बच्चे को देखने के टैग से आईडी को शामिल किया, तो यह काम करना शुरू कर दिया।

निश्चित अभिभावक:

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="home_phone"
    android:background="@color/colorPrimary">

    ...

    <include
        layout="@layout/retry_button"
        android:id="@+id/retry"
        android:visibility="gone" />

निश्चित बच्चा:

<com.foo.RetryButton
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:layout_width="100dp"
    android:layout_height="140dp">

2

मेरा मामला ऊपर जैसा नहीं है, कोई समाधान काम नहीं आया। मुझे लगता है कि मेरा दृष्टिकोण लेआउट पदानुक्रम में बहुत गहरा था। मैंने इसे एक स्तर ऊपर बढ़ाया और यह अब शून्य नहीं था।


मैं एक ही समस्या है, एक स्तर उच्च भी पाया जा सकता है .. यह काफी कष्टप्रद है और मैं जानना चाहूंगा कि ऐसा क्यों हो रहा है क्योंकि मैं अपना मेनू नहीं बना सकता जैसे मैं चाहता हूं
NaturalBornCamper

अच्छी तरह से गहरी लेआउट पदानुक्रम विरोधी पैटर्न हैं, लगभग हमेशा एक क्लीनर समाधान होता है। क्या आप टूलबार, या नेविगेशन दराज में अतिप्रवाह मेनू के बारे में बात कर रहे हैं?
डिविडास स्ट्राइगा

मार्गदर्शक ड्रॉवर, मैं पहले से ही वास्तव में एक और प्रश्न पोस्ट, कि एक समूह के अंदर एक मेनू आइटम काम नहीं कर रहा जोड़ने को छोड़कर, बस सभी वस्तुओं के अंत में यह कहते हैं: stackoverflow.com/questions/47955376/...
NaturalBornCamper

1

मेरे मामले में मैंने लेआउट को बढ़ा दिया था लेकिन बच्चे के विचार अशक्त हो रहे थे। मूल रूप से मेरे पास यह था:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_history);

    footerView = ((LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listview_footer, null, false);
    pbSpinner = (ProgressBar) findViewById(R.id.pbListviewFooter);
    tvText = (TextView) findViewById(R.id.tvListviewFooter);
    ...
}

हालाँकि, जब मैंने इसे निम्नलिखित में बदल दिया तो यह काम कर गया:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_history);

    footerView = ((LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listview_footer, null, false);
    pbSpinner = (ProgressBar) footerView.findViewById(R.id.pbListviewFooter);
    tvText = (TextView) footerView.findViewById(R.id.tvListviewFooter);
    ...
}

कुंजी विशेष रूप से पहले से ही फुलाया लेआउट को संदर्भित करने के लिए थी ताकि बच्चे के विचार प्राप्त कर सकें। वह यह है footerView:

  • footerView .findViewById ...

0

मेरे अनुभव में, ऐसा लगता है कि ऐसा तब भी हो सकता है जब आपका कोड OnDestroyView के बाद कहा जाता है (जब टुकड़ा बैक स्टैक पर होता है।) यदि आप ब्रॉडकास्टरेसीवर से इनपुट पर यूआई को अपडेट कर रहे हैं, तो आपको यह जांचना चाहिए कि क्या यह मामला है। ।


0

LAYOUT में शामिल करें !! (जिसमें आईडी शामिल है)

मेरे मामले में findViewById () शून्य हो गया, क्योंकि लेआउट जिसमें तत्व लिखा गया था, फुलाया नहीं गया था ...

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

<ListView
android:id="@+id/listview">

findViewById (R.id.listview) अशक्त हो गया, क्योंकि मैंने inflater.inflate (R.layout.fragment_layout, ..., ...) नहीं किया था; इससे पहले।

उम्मीद है कि यह उत्तर कुछ y'all में मदद करता है।


0

मेरा फिक्स सिर्फ प्रोजेक्ट को साफ करना था।


0

यदि आप एक फ्रैगमेंट के अंदर हैं, तो findViewById भी अशक्त हो सकता है। जैसा कि यहाँ बताया गया है: Fragment में findViewById

शीर्ष स्तर के दृश्य को फ़्रैगमेंट में वापस करने के लिए आपको getView () को कॉल करना चाहिए। फिर आप लेआउट आइटम (बटन, पाठ्य सामग्री, आदि) पा सकते हैं


0

मैंने कोशिश की है कि उपरोक्त सभी कुछ भी काम नहीं कर रहा था .. इसलिए मुझे अपना ImageView स्थिर बनाना था public static ImageView texture;और फिर texture = (ImageView) findViewById(R.id.texture_back);, मुझे नहीं लगता कि यह एक अच्छा तरीका है, लेकिन यह वास्तव में मेरे मामले के लिए काम करता है :)


क्षमा करें, मुझे लगता है कि स्थिर विचार बुरा विचार है
vuhung3990

0

मेरे मामले में, findViewById अशक्त वापस आ गया जब मैंने माता-पिता से कॉल को एक एडाप्टर ऑब्जेक्ट में माता-पिता द्वारा त्वरित रूप से स्थानांतरित कर दिया। सफलता के बिना यहां सूचीबद्ध ट्रिक्स को आजमाने के बाद, मैंने findViewById को मूल ऑब्जेक्ट में वापस स्थानांतरित कर दिया और एडॉप्टर ऑब्जेक्ट के इंस्टेंटेशन के दौरान एक पैरामीटर के रूप में परिणाम पारित किया। उदाहरण के लिए, मैंने पैरेंट ऑब्जेक्ट में यह किया है:

 Spinner hdSpinner = (Spinner)view.findViewById(R.id.accountsSpinner);

तब मैंने एडॉप्टर ऑब्जेक्ट के निर्माण के दौरान एक पैरामीटर के रूप में एचडीस्पिनर पास किया:

  mTransactionAdapter = new TransactionAdapter(getActivity(),
        R.layout.transactions_list_item, null, from, to, 0, hdSpinner);

0

यह मेरे लिए दुर्घटनाग्रस्त हो गया क्योंकि मेरी गतिविधि आईडी में से एक फ़ील्ड अन्य गतिविधि में आईडी से मेल खा रही थी। मैंने इसे एक यूनिक आईडी देकर तय किया।

मेरे loginActivity.xml पासवर्ड फील्ड आईडी में "पासवर्ड" था। अपनी पंजीकरण गतिविधि में मैंने सिर्फ आईडी r_password देकर इसे ठीक किया, फिर यह अशक्त नहीं हुआ:

password = (EditText)findViewById(R.id.r_password);

0

मैं एक ऐसी ही समस्या का सामना कर रहा था जब मैं एक के लिए एक कस्टम दृश्य करने की कोशिश कर रहा था ListView

मैंने ऐसा करके इसे सरल रूप से हल किया:

public View getView(int i, View view, ViewGroup viewGroup) {

    // Gets the inflater
    LayoutInflater inflater = LayoutInflater.from(this.contexto);

    // Inflates the layout
    ConstraintLayout cl2 = (ConstraintLayout) 
    inflater.inflate(R.layout.custom_list_view, viewGroup, false);

    //Insted of calling just findViewById, I call de cl2.findViewById method. cl2 is the layout I have just inflated. 
     TextView tv1 = (TextView)cl2.findViewById(cl2);

0

डिबग करने और समस्या खोजने के तरीके:

  • अपनी गतिविधि में सभी findViewById पर टिप्पणी करें।
  • OnCreate और setContentView को छोड़कर सब कुछ टिप्पणी करें
  • प्रोजेक्ट चलाएँ और देखें कि क्या कोई लेआउट सेट है

मेरे मामले में, मैं अपने ऐप मॉड्यूल और मेरे लाइब्रेरी मॉड्यूल दोनों में activity_main.xml का उपयोग कर रहा था। इसलिए जब मैंने उपर्युक्त चरणों का प्रदर्शन किया, तो लाइब्रेरी में मेरे द्वारा तैयार किए गए लेआउट के बजाय, ऐप मॉड्यूल के अंदर का लेआउट फुलाया गया।

इसलिए मैंने activity_main.xml फ़ाइल नाम को गतिविधि_main_lib.xml में बदल दिया।

इसलिए सुनिश्चित करें कि आपके पूरे प्रोजेक्ट में कोई डुप्लिकेट लेआउट नाम नहीं है

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