FindViewByID নালার ফেরত দেয়


250

প্রথমত: হ্যাঁ, আমি এই বিষয়ে অন্যান্য সমস্ত থ্রেড পড়েছি। এবং কেবল এই সাইট থেকে নয় ... (আপনি দেখুন, আমি কিছুটা হতাশ)

তাদের বেশিরভাগই এক্সএমএল ফাইলের 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হিসাবে অনুমিত কাজ করা উচিত। তত্ত্বাবধান: এটি কোনও সমাধান করেনি।

তাহলে আমি কী ভুল করছি?

আমি কোন মন্তব্য প্রশংসা করব।


6
প্রকল্পটি খুব দূষিত হলে এটি ঘটতে পারে। আমি প্রকল্পটি পরিষ্কার করে এটি ঠিক করেছি
পেসারিয়ার

1
ভুল প্রসঙ্গে প্রসঙ্গটি দেখুন ধন্যবাদ
izzy

1
@ পেসারিয়র আপনাকে ধন্যবাদ যে আমার সমস্যা সমাধান। আমি জ্যামারিনে অ্যান্ড্রয়েড প্রোগ্রামিংকে ঘৃণা করতে শুরু করি)
আর্টিয়াম

@ পেসারিয়ার "ক্লিন প্রজেক্ট" আমার সমস্যার সমাধানও করেছে। মনে হচ্ছে ড্রপবক্সটি প্রকল্পটিকে কলুষিত করেছে।
কোহকি মমেটানী

উত্তর:


270

যা শূন্য ফিরে

সম্ভবত আপনি এটি খুব তাড়াতাড়ি কল করছেন কারণ। অপেক্ষা করুন onFinishInflate()এখানে একটি নমুনা প্রকল্পView এটির বিষয়বস্তু অ্যাক্সেস করার জন্য একটি কাস্টম প্রদর্শন করে ।


67
ঈশ্বর! আমি বিশ্বাস করি না আমি এত তুচ্ছ কিছুতে দিন কাটিয়েছি। আমি FindViewById () কলটির উপরে সেটকন্টেন্টভিউ () সরিয়ে নিয়েছি এবং এটি সে চালাকি করতে পারেনি। ধন্যবাদ!
এজেন্টকারি

2
@ কমন্সস এটি কি সঠিক প্রকল্প? আমি github.com/commonsguy/cw-advandroid/tree/master/Animation/…
likejudo 12:44

1
@ লাইকজিউজিৎসু: এটি হয়ত ২০১০ সালে ফিরে এসেছিল I আমি একটি নতুন প্রকল্পের লিঙ্কটি আপডেট করেছি onFinishInflate()
কমন্সওয়্যার

3
ফাইন্ডভিউআইআইডির আগে আমার আমার সেটকন্টেন্টভিউ কল হয়েছে এবং এটি এখনও শূন্য। আমি একটি সম্পাদনা
পাঠ্য

1
সর্বদা ফিক্সড গিটহাব কমিটস এর লিঙ্ক করুন (উদাঃ github.com/commonsguy/cw-omnibus/tree/… ) এবং রেপো বা রিবেস কখনও মুছবেন না ;-)
সিওরো সান্তিলি 法轮功 冠状 病 六四 事件 法轮功

145

সম্ভবত, আপনি কল findViewByIdকরার আগে কল করছেন setContentView? যদি এটি হয় তবে কল করার findViewById পরে কল করার চেষ্টা করুনsetContentView


1
যেমন একটি সহজ ভুল টোট করতে কিন্তু দুর্ভাগ্যক্রমে এটি আমি করলাম। ডিবাগারটি কোনও কাজে আসেনি কারণ এটি বলেছে যে ত্রুটিটি আমার নতুন অভিপ্রায় লাইনে ছিল আমি যে প্রকৃত নতুন ক্রিয়াকলাপটি বলছি তা নয়। ধন্যবাদ!
edude05

6
আসলে আমার এই ত্রুটি হয়েছিল কারণ আমি সেট কনটেন্টভিউকে ভুল দর্শনের দিকে ইঙ্গিত করে ডাকছিলাম ... দুর্ভাগ্যক্রমে সংকলক এই ধরণের ত্রুটিটি ধরছে না।
হিফফান জন

হ্যাঁ, আমি ভুল করে সেটকন্টেন্টভিউ মুছে ফেলেছি এবং আমার প্রোগ্রাম কেন ক্রাশ হতে শুরু করেছে তা বুঝতে পারি না।
রোনেন ফেস্টিংগার

100

বিভিন্ন স্ক্রিন ঘনত্বের জন্য আপনার বিন্যাসের একাধিক সংস্করণ না রয়েছে তা নিশ্চিত করুন। বিদ্যমান লেআউটে নতুন আইডি যুক্ত করার সময় আমি এই সমস্যার মধ্যে পড়েছিলাম তবে এইচডিপিআই সংস্করণটি আপডেট করতে ভুলে গিয়েছি। আপনি যদি লেআউট ফাইলের সমস্ত সংস্করণ আপডেট করতে ভুলে যান তবে এটি কিছু স্ক্রিন ঘনত্বের জন্য কাজ করবে তবে অন্যদের জন্য নয়।


8
ধন্যবাদ! ঐটা এটা ছিল. (আমার ক্ষেত্রে আমার কাছে বিভিন্ন অ্যান্ড্রয়েড সংস্করণের একাধিক সংস্করণ রয়েছে)। আমি প্রতিটি সময় এটি ভুলে যাই যদিও আমি প্রতিটি লেআউট ফাইলের উপরে এবং নীচে একটি বিশাল মন্তব্য রাখি। আমি আশা করি সংঘটিতকারীটি যদি এটি ঘটে তবে কোনও ত্রুটি বা বড় সতর্কতা তৈরি করবে।
টিকটাক

ডিং ডিং ডিং, আপনাকে অনেক ধন্যবাদ! এই লোলটির উপরে আমার মস্তিষ্ককে নমন করছিল
Zach

21

আপনি যদি কাস্টম ভিউতে ভুল সুপার কনস্ট্রাক্টরকে কল করেন ফাইন্ডভিউবিআইডি নালাম হতে পারে। আইডি ট্যাগটি অ্যাটর্সের অংশ, সুতরাং আপনি যদি অ্যাটর্সগুলিকে উপেক্ষা করেন তবে আপনি আইডিটি মুছুন।

এটি ভুল হবে

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

এটা সঠিক

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

1
আপনাকে অনেক ধন্যবাদ স্যার! আমি এতটা গাফিল, আমি এমনকি আমার আইডিইতে কিছু ভুল ছিল তা নিয়ে সন্দেহও করেছিলাম। আপনার উত্তর পূরণ করতে কত ভাগ্যবান।
EffectiveMatrix

আমি আমার কাস্টম ভিউ তৈরি করার সময় এই ভুলটি করেছি। ধন্যবাদ, 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ভিউ বা লেআউটে দিয়েছেন তা নিশ্চিত হয়ে নিন MakesetContentView()
  • নিশ্চিত হয়ে নিন যে এটি idদুর্ঘটনাক্রমে বিভিন্ন লেআউটে নকল হয়নি

স্ট্যান্ডার্ড লেআউটে কাস্টম দর্শনগুলির জন্য আমি একটি খুঁজে পেয়েছি, যা ডকুমেন্টেশনের বিরুদ্ধে যায়:

তত্ত্বে আপনি একটি কাস্টম ভিউ তৈরি করতে এবং এটি একটি বিন্যাসে যুক্ত করতে পারেন ( এখানে দেখুন )। তবে, আমি দেখতে পেয়েছি যে এই জাতীয় পরিস্থিতিতে, কখনও কখনও idকাস্টমগুলি বাদ দিয়ে বিন্যাসে সমস্ত দৃশ্যের জন্য বৈশিষ্ট্য কাজ করে works আমি যে সমাধানটি ব্যবহার করি তা হ'ল:

  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);

    যা ফ্রেমে কাস্টম ভিউ রাখে।


এটি আমাকে সহায়তা করেছিল: "নিশ্চিত করুন যে আপনি যে আইডিটি চান তা সেটিং কনটেন্টভিউ () কে আপনি দিয়েছেন বা লেআউটে রয়েছে"। এটি যদি একটি পর্যালোচনা হয় তবে কী করবেন? প্যারেন্ট ভিউটি পাওয়ার চেষ্টা করে তারপরে প্যারেন্টভিউ.ফাইন্ডবিআইডি () করুন তবে এটি এখনও শূন্য ফিরে আসছে
NaturalBornCamper

@ প্রাকৃতিক জন্মদানকারী যদি আপনি উদাহরণ কোড সহ একটি পৃথক প্রশ্ন পোস্ট করেন তবে আমি এটি দেখে আসব।
নীল টাউনসেন্ড

ধন্যবাদ নিল, আমি ইতিমধ্যে পোস্ট তাই আমি একটি ভিন্ন কৌশল ব্যবহার করতে হয়েছে কেউ এই কাজ করতে একটি ভাল উপায় উল্লেখ, যদিও এটি ঠিক কাজ করছে না কিভাবে এটি করা উচিত: stackoverflow.com/questions/47955376/...
NaturalBornCamper


6

যারা এক্সপেন্ডেবললিস্টভিউ ব্যবহার করছেন এবং এর শিরোনামের ভিত্তিতে এই প্রশ্নটিতে চলেছেন তাদের একটি উত্তর।

এক্সপেন্ডেবললিস্টভিউ বাস্তবায়নের অংশ হিসাবে আমার সন্তানের এবং গোষ্ঠী দর্শনে টেক্সটভিউগুলির সাথে কাজ করার চেষ্টা করার সময় আমার এই ত্রুটি হয়েছিল।

গেটচিল্ড ভিউ () এবং গেটগ্রুপভিউ () পদ্ধতিগুলি প্রয়োগ করার ক্ষেত্রে আপনি নিম্নলিখিতগুলির মতো কিছু ব্যবহার করতে পারেন।

        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

এফডাব্লুআইডাব্লু, আমি দেখতে পাচ্ছি না যে কেউ আমার প্রয়োজন মতো ঠিক একইভাবে সমাধান করেছে। সংকলনের সময় কোনও অভিযোগ নেই, তবে রানটাইমের সময় আমি একটি শূন্য দৃষ্টিভঙ্গি পেয়েছি এবং জিনিসগুলিকে যথাযথভাবে কল করছি। সেটিংসটভিউ () এর পরে FindViewById ()। সমস্যাটি দেখা গেল যে আমার ভিউটি কন্টেন্ট_মাইন.এক্সএমএল-তে সংজ্ঞায়িত হয়েছে, তবে আমার কার্যকলাপ_মিনি.এক্সএমএল-এ আমার এই বক্তব্যটির অভাব রয়েছে:

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

আমি যখন এটি কার্যকলাপ_মাইন.এক্সএমএল-এ যুক্ত করেছি তখন আর নুলপয়েন্টার নেই P


একটি টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো করা সমস্যাটি হ'ল আপনি কখনও কখনও কিছু জিনিস পরিবর্তন করতে ভুলে যান ... এর মধ্যে একটি স্ফীত করার সঠিক বিন্যাস হ'ল। ধন্যবাদ!
পাবলো কুইম

3

আমারও একই সমস্যা ছিল আমি একটি তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করছিলাম যা আপনাকে গ্রিডভিউয়ের জন্য তাদের অ্যাডাপ্টারকে ওভাররাইড করতে এবং প্রতিটি গ্রিডভিউ ঘরের জন্য আপনার নিজস্ব বিন্যাস নির্দিষ্ট করতে দেয়।

অবশেষে বুঝতে পারলাম কি হচ্ছে। গ্রিডভিউতে প্রতিটি কক্ষের জন্য গ্রহনটি গ্রন্থাগারের বিন্যাসের এক্সএমএল ফাইলটি ব্যবহার করছিল, যদিও এটি এর কোনও ইঙ্গিত দেয়নি। আমার কাস্টম অ্যাডাপ্টারে এটি সূচিত করেছে যে এটি রানটাইম সত্ত্বেও আমার নিজস্ব প্রকল্প থেকে এক্সএমএল সংস্থান ব্যবহার করছে, এটি ছিল না।

সুতরাং আমি যা করেছি তা নিশ্চিত করা ছিল যে আমার কাস্টম এক্সএমএল লেআউট এবং আইডিগুলি লাইব্রেরিতে বসে থাকা, প্রকল্পটি পরিষ্কার করা এবং তারপরে এটি আমার প্রকল্পের সঠিক কাস্টম লেআউটগুলি পড়া শুরু করেছিল from

সংক্ষেপে, আপনি যদি কোনও তৃতীয় পক্ষের লাইব্রেরির অ্যাডাপ্টারকে ওভাররাইড করে থাকেন এবং অ্যাডাপ্টারটি ব্যবহারের জন্য আপনার নিজস্ব লেআউট এক্সএমএল নির্দিষ্ট করে থাকেন তবে সাবধান হন। আপনার প্রকল্পের অভ্যন্তরে যদি আপনার লেআউটটির লাইব্রেরির মতো ফাইলের নাম থাকে, তবে আপনি সম্ভবত খুঁজে পাওয়া একটি কঠিন বাগের মুখোমুখি হতে পারেন!


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

আমার ক্ষেত্রে, আমি এক্সপেন্ডেবললিস্টভিউ ব্যবহার করছিলাম এবং আমি সেট করেছিলাম android:transcriptMode="normal"। এর ফলে সম্প্রসারণযোগ্য গোষ্ঠীর কয়েকটি শিশু অদৃশ্য হয়ে গিয়েছিল এবং যখনই আমি তালিকাটি স্ক্রোল করতাম তখন আমি নুআলএল ব্যতিক্রম পেতাম।


2

আমার জন্য একই ক্রিয়াকলাপের জন্য আমার দুটি এক্সএমএল লেআউট ছিল - একটি প্রতিকৃতি মোডে এবং একটি ল্যান্ডস্কেপে। অবশ্যই আমি ল্যান্ডস্কেপ এক্সএমএলে কোনও সামগ্রীর আইডি পরিবর্তন করেছি তবে প্রতিকৃতি সংস্করণে একই পরিবর্তন করতে ভুলে গিয়েছিলাম। আপনি যদি এটি পরিবর্তন করেন তবে আপনি অন্য এক্সএমএলকেও একই পরিবর্তন করেন বা চালানো / ডিবাগ না করা পর্যন্ত আপনি ত্রুটি পাবেন না এবং আপনি যে আইডিটি পরিবর্তন করেননি তা খুঁজে পেতে পারেন না তা নিশ্চিত করুন। ওরে বোবা ভুল, তুমি আমাকে এতো শাস্তি দেবে কেন?


2

বিন্যাস সংস্থান থেকে ক্রিয়াকলাপের সামগ্রী সেট করুন content ie।, setContentView(R.layout.basicXml);


2

উপরের সমাধানগুলি ছাড়াও আপনি নিশ্চিত করতে পারেন
tools:context=".TakeMultipleImages" যে বিন্যাসটির মূল ফাইলে মেইনফেস্ট.এক্সএমএল ফাইলের একই মূল্য রয়েছে:
android:name=".TakeMultipleImages"একই ক্রিয়াকলাপের উপাদানটির জন্য। নতুন কার্যকলাপ তৈরি করতে কপি এবং পেস্ট ব্যবহার করার সময় এটি ঘটে


2

আমারও একই সমস্যা, তবে আমি মনে করি এটি আপনার সাথে ভাগ করে নেওয়ার পক্ষে উপযুক্ত। আপনার যদি কাস্টম লেআউটে ভিউবিআইআইডি খুঁজে পেতে হয়, উদাহরণস্বরূপ:

public class MiniPlayerControllBar extends LinearLayout {
    //code
}

আপনি কনস্ট্রাক্টর এ ভিউ পেতে পারেন না। ভিউ স্ফীত হওয়ার পরে আপনার ফাইন্ডভিউইআইডি কল করা উচিত। এগুলি হ'ল এমন একটি পদ্ধতি যা আপনি ওভাররাইড করতে পারেনonFinishInflate


2

আমার নির্দিষ্ট কেসটি এখানে ছুঁড়ে মারতে চেয়েছিলাম। লাইনে কাউকে সাহায্য করতে পারে।

আমি আমার অ্যান্ড্রয়েড ইউআই এক্সএমএলে এইভাবে নির্দেশনাটি ব্যবহার করছিলাম:

মূল দৃষ্টিভঙ্গি:

<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

আমার কেস উপরের মতো আর নেই, কোনও সমাধান কাজ করেনি। আমি ধরে নিই যে আমার দৃষ্টিভঙ্গি লেআউট স্তরক্রমের মধ্যে খুব গভীর ছিল। আমি এটিকে এক স্তর উপরে নিয়ে এসেছি এবং এটি আর শূন্য ছিল না।


আমারও একই সমস্যা রয়েছে, এক স্তর
উচ্চতরটিও

বেশ গভীর লেআউট স্তরক্রম হ'ল বিরোধী নিদর্শন, প্রায়শই একটি ক্লিনার সমাধান থাকে। আপনি কি সরঞ্জামদণ্ডের ওভারফ্লো মেনু, বা নেভিগেশন ড্রয়ারের কথা বলছেন?
ডিভিডাস স্ট্রোগোগ

ন্যাভিগেশন ড্রয়ারে, আমি ইতিমধ্যে আসলে আরেকটি প্রশ্ন পোস্ট, যে একটি গ্রুপ ভিতরে একটি মেনু আইটেম কাজ করছে না যোগ ব্যতীত শুধু সব আইটেম শেষে এটা যোগ করেছেন: 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:

  • পাদলেখ .ফাইন্ডভিউবিআইআইডি ...

0

আমার অভিজ্ঞতায়, মনে হচ্ছে এটি অনডেস্ট্রয়ভিউয়ের পরে যখন আপনার কোডটি কল করা হয় তখনও এটি ঘটতে পারে (যখন খণ্ডটি পিছনের স্ট্যাকের দিকে থাকে)) আপনি যদি কোনও ব্রডকাস্টারসিভার থেকে ইনপুটটিতে ইউআই আপডেট করে থাকেন তবে আপনার অবশ্যই এটি পরীক্ষা করা উচিত কিনা তা যাচাই করা উচিত ।


0

লেআউটটি প্রকাশ করুন !! (যা আইডি ধারণ করে)

আমার ক্ষেত্রে সন্ধান করুন ভিউআইআইডি () নালাগুলি ফিরে এসেছে, কারণ যে বিন্যাসটিতে উপাদানটি লেখা হয়েছিল তা স্ফীত হয়নি ...

যেমন। fragment_layout.xml

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

FindViewById (R.id.listview) বাতিল হয়ে গেছে, কারণ আমি inflater.inflate (R.layout.fraament_layout, ..., ...) করিনি; এইটার আগে.

আশা করি এই উত্তরটি আপনার সকলকে সাহায্য করবে।


0

আমার ফিক্সটি ছিল কেবলমাত্র প্রকল্পটি পরিষ্কার করা।


0

আপনি যদি কোনও খণ্ডের মধ্যে থাকেন তবে সন্ধান ভিউআইডিও নালাগুলি ফিরে আসতে পারে। এখানে বর্ণিত হিসাবে: খণ্ডে FindViewById

কোনও খণ্ডের মধ্যে শীর্ষ স্তরের ভিউ ফিরে আসতে আপনার getView () কল করা উচিত। তারপরে আপনি বিন্যাস আইটেমগুলি (বোতাম, পাঠ্যদর্শনগুলি ইত্যাদি) সন্ধান করতে পারেন


0

আমি উপরের সমস্ত কিছুই কাজ করে যাচ্ছি না চেষ্টা করেছি .. তাই আমাকে আমার ইমেজভিউ স্থির করতে হয়েছিল public static ImageView texture; এবং তারপরে texture = (ImageView) findViewById(R.id.texture_back);, আমি মনে করি না এটি একটি ভাল পদ্ধতির তবে এটি সত্যিই আমার ক্ষেত্রে কাজ করেছে :)


দুঃখিত, আমি স্থির দৃষ্টিভঙ্গি খারাপ ধারণা বলে মনে করি
vuhung3990

0

আমার ক্ষেত্রে, যখন আমি পিতামাতার দ্বারা তাত্ক্ষণিকভাবে কোনও অ্যাডাপ্টারের বস্তুতে পিতামাত্ত বস্তু থেকে কলটি সরিয়ে নিয়েছি তখন ফাইন্ডভিউআইডি নালায় ফিরে আসে। সাফল্য ছাড়াই এখানে তালিকাভুক্ত কৌশলগুলি চেষ্টা করার পরে, আমি অনুসন্ধান ভিবিআইআইডি ফিরে প্যারেন্ট অবজেক্টে সরিয়ে নিয়েছি এবং অ্যাডাপ্টার অবজেক্টটি ইনস্ট্যান্ট করার সময় ফলাফলটিকে প্যারামিটার হিসাবে পাস করেছি। উদাহরণস্বরূপ, আমি প্যারেন্ট অবজেক্টে এটি করেছি:

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

তারপরে অ্যাডাপ্টার অবজেক্ট তৈরির সময় আমি প্যারামিটার হিসাবে এইচডিএসপিনারটি পাস করেছি:

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

0

এটি আমার জন্য ক্র্যাশ হয়ে গেছে কারণ আমার ক্রিয়াকলাপ আইডির একটি ক্ষেত্র অন্য ক্রিয়াকলাপের আইডির সাথে মিলছিল। আমি একটি অনন্য আইডি দিয়ে এটি স্থির।

আমার লগইনঅ্যাক্টিভিটি.এক্সএমএল পাসওয়ার্ডের ফিল্ড আইডি ছিল "পাসওয়ার্ড"। আমার নিবন্ধকরণের ক্রিয়াকলাপে আমি কেবলমাত্র 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 মন্তব্য করুন।
  • অনক্রিট এবং সেট কনটেন্টভিউ বাদে সমস্ত কিছু মন্তব্য করুন
  • প্রকল্পটি চালান এবং দেখুন কোনও বিন্যাস সেট করা আছে কিনা

আমার ক্ষেত্রে, আমি আমার অ্যাপ্লিকেশন মডিউল এবং আমার লাইব্রেরি মডিউল উভয়টিতেই কার্যকলাপ_মাইন.এক্সএমএল ব্যবহার করছিলাম। সুতরাং আমি যখন উপরের পদক্ষেপগুলি সম্পাদন করেছি তখন আমি লাইব্রেরিতে নকশাকৃত লেআউটটির পরিবর্তে অ্যাপ মডিউলের অভ্যন্তরে বিন্যাসটি স্ফীত করেছিলাম।

সুতরাং আমি ক্রিয়াকলাপ_মাইন.এক্সএমএল ফাইলের নামটিকে কার্যকলাপ_মোইন_লিব.এক্সএমএল পরিবর্তন করেছি।

সুতরাং নিশ্চিত হয়ে নিন যে আপনার পুরো প্রকল্পে কোনও সদৃশ বিন্যাসের নাম নেই

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.