অ্যান্ড্রয়েড idওভারভিউ
একটি অ্যান্ড্রয়েড idহল একটি পূর্ণসংখ্যা যা সাধারণত দর্শন সনাক্ত করতে ব্যবহৃত হয়; এই idএক্সএমএল (যখন সম্ভব নয়) এবং কোড মাধ্যমে মাধ্যমে নির্ধারিত করা যেতে পারে (প্রোগ্রামেটিক্যালি।) idজন্য XML-সংজ্ঞায়িত রেফারেন্স পাবার জন্য সর্বাধিক কার্যকরী Viewগুলি একটি দ্বারা উত্পন্ন Inflater(যেমন ব্যবহার করে যেমন setContentView।)
idমাধ্যমে বরাদ্দ করুনXML
- আপনার ভিউতে
android:id="@+id/কোনও নামের একটি বৈশিষ্ট্য যুক্ত করুন "।
- যখন আপনার অ্যাপ্লিকেশনটি নির্মিত হয়, কোডগুলিতে ব্যবহারের জন্য
android:idএটিকে একটি অনন্য দেওয়া হবে int।
- আপনার অবগতির
android:idএর int"ব্যবহার কোডে মান R.id.somename" (কার্যকরভাবে একটি ধ্রুবক।)
- এটি
intবিল্ড থেকে বিল্ড এ পরিবর্তিত হতে পারে তাই প্যাকেজ.নাম / থেকে কোনও আইডি অনুলিপি করবেন না , কেবল "কিছু নাম" ব্যবহার করুন ।gen/R.javaR.id.
- (এছাড়াও, এক্সএমএল এ
idনির্ধারিত একটি এটিকে উত্পন্ন Preferenceকরার সময় ব্যবহার করা হয় না ))PreferenceView
idকোডের মাধ্যমে বরাদ্দ করুন (প্রোগ্রাম্যাটিকভাবে)
- Int
idব্যবহার করে ম্যানুয়ালি সেট করুনsomeView.setId();
intঅবশ্যই ধনাত্মক হবে, কিন্তু অন্যথায় এটা যাহা চান হতে পারে arbitrary- হয় (পড়া এই ভয়ঙ্কর রাখা।)
- উদাহরণস্বরূপ, যদি আইটেমগুলি উপস্থাপন করে এমন বেশ কয়েকটি ভিউ তৈরি করে এবং সংখ্যা নির্ধারণ করে, আপনি তাদের আইটেম নম্বরটি ব্যবহার করতে পারেন।
স্বতন্ত্রতা idগুলি
XML-সাইন করা idগুলি অনন্য হবে।
- কোড-নির্ধারিত
idগুলি অনন্য হতে হবে না
- কোড-নির্ধারিত
idএস - এর সাথে তাত্ত্বিকভাবে (তাত্ত্বিকভাবে) বিরোধী হতে XMLপারে id।
idসঠিকভাবে জিজ্ঞাসা করা থাকলে (পড়তে থাকুন) এই বিবাদমানগুলির পক্ষে কিছু আসে যায় না ।
কখন (এবং কেন) দ্বন্দ্বপূর্ণ idবিষয়গুলি বিবেচনা করে না
findViewById(int)আপনি যে ভিউটি নির্দিষ্ট করেছেন তার থেকে ভিউ হায়ারার্কির মাধ্যমে গভীরতার-প্রথম পুনরাবৃত্তির সাথে পুনরাবৃত্ত হবে এবং Viewএটি কোনও মিলের সাথে খুঁজে পাওয়া প্রথমটি ফিরিয়ে দেবে id।
- শ্রেণিবিন্যাসে
idকোনও এক্সএমএল-সংজ্ঞায়িত হওয়ার আগে যতক্ষণ কোনও কোড-নির্ধারিত অ্যাসাইন করা থাকে না, ততক্ষণ সর্বদা এক্সএমএল-সংজ্ঞায়িত ভিউটি ফিরিয়ে দেবে তাই 'ডি।idfindViewById(R.id.somename)id
পরিবর্তনশীল দৃশ্যগুলি এবং বরাদ্দ করা তৈরি করা হচ্ছে IDগুলি
আপনি যদি আপনার মতামতের রেফারেন্সগুলি আশেপাশে রাখতে চান , তবে সেগুলি দিয়ে তাত্ক্ষণিকভাবে getApplicationContext()নিশ্চিত হয়ে নিন এবং প্রতিটি রেফারেন্স নাল-ইন করতে ভুলবেন না onDestroy। স্পষ্টতই ফুটো করা Activity(ধ্বংস হয়ে যাওয়ার পরে এটির উপর ঝুলানো) অপব্যয়ী .. :)
android:idকোডে ব্যবহারের জন্য একটি এক্সএমএল সংরক্ষণ করুন
API 17 প্রবর্তিত View.generateViewId() যা একটি অনন্য আইডি উত্পন্ন করে। (এটিকে নির্দেশ করার জন্য পরিবর্তন-গ্রহণ-পরিবর্তনগুলি ধন্যবাদ)) *
যদি আপনার ViewGroupএক্সএমএল এর মাধ্যমে সংজ্ঞায়িত না করা যায় (বা আপনি এটি হতে চান না) তবে এটি অনন্য থেকে যায় তা নিশ্চিত করতে আপনি XML এর মাধ্যমে আইডিটি সংরক্ষণ করতে পারেন:
এখানে মান / ids.xML একটি কাস্টম সংজ্ঞায়িত করে id:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="reservedNamedId" type="id"/>
</resources>
তারপরে একবার ভিউ গ্রুপ বা ভিউ তৈরি হয়ে গেলে আপনি কাস্টম আইডি সংযুক্ত করতে পারেন
myViewGroup.setId(R.id.reservedNamedId);
বিরোধপূর্ণ idউদাহরণ
অস্পষ্ট উদাহরণের মাধ্যমে স্বচ্ছতার জন্য, idপর্দার আড়ালে কোনও বিরোধ দেখা দিলে কী ঘটে তা পরীক্ষা করে দেখি ।
বিন্যাস / mylayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/placeholder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
</LinearLayout>
কোনও সংঘাতের অনুকরণের জন্য, আমাদের সর্বশেষ বিল্ডকে নির্ধারিত R.id.placeholder( @+id/placeholder) এর একটি intমান বলতে দিন 12 ..
এরপরে, মাইএকটিভিটি.জভা প্রোগ্রাম যুক্তভাবে কিছু সংখ্যক ভিউ সংজ্ঞায়িত করে (কোডের মাধ্যমে):
int placeholderId = R.id.placeholder; // placeholderId==12
// returns *placeholder* which has id==12:
ViewGroup placeholder = (ViewGroup)this.findViewById(placeholderId);
for (int i=0; i<20; i++){
TextView tv = new TextView(this.getApplicationContext());
// One new TextView will also be assigned an id==12:
tv.setId(i);
placeholder.addView(tv);
}
সুতরাং placeholderএবং আমাদের নতুন TextViewদুটির মধ্যে একটির id12 টি রয়েছে! তবে যদি আমরা স্থানধারকের শিশু দৃষ্টিভঙ্গিগুলি জিজ্ঞাসা করি তবে এটি আসলেই কোনও সমস্যা নয়:
// Will return a generated TextView:
placeholder.findViewById(12);
// Whereas this will return the ViewGroup *placeholder*;
// as long as its R.id remains 12:
Activity.this.findViewById(12);
* এত খারাপ না