আমি এই উত্তরটি লিখেছি কারণ বেশ কয়েকটি স্ট্যাকওভারফ্লো পৃষ্ঠাগুলি পেরিয়ে যাওয়ার পরেও আমি সংযুক্তি টুরোট বলতে কী বোঝাতে পেরেছি তা স্পষ্টভাবে বুঝতে পারি নি। নীচে লেআউটআইনফ্লেটার ক্লাসে স্ফীত () পদ্ধতি রয়েছে।
View inflate (int resource, ViewGroup root, boolean attachToRoot)
কটাক্ষপাত activity_main.xml ফাইল, button.xml বিন্যাস এবং MainActivity.java আমার তৈরি ফাইল।
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
button.xml
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LayoutInflater inflater = getLayoutInflater();
LinearLayout root = (LinearLayout) findViewById(R.id.root);
View view = inflater.inflate(R.layout.button, root, false);
}
যখন আমরা কোডটি চালাই, আমরা বিন্যাসের বোতামটি দেখতে পাব না। এটি কারণ আমাদের বোতাম লেআউটটি মূল ক্রিয়াকলাপের লেআউটে যোগ করা হয়নি, যেহেতু সংযুক্তি-ট্রুটটি মিথ্যাতে সেট করা আছে।
লিনিয়ারলআউটে একটি অ্যাডভিউ (ভিউ ভিউ) পদ্ধতি রয়েছে যা লিনিয়ারলআউটে ভিউ যুক্ত করতে ব্যবহার করা যেতে পারে। এটি মূল ক্রিয়াকলাপের বিন্যাসে বোতামের লেআউট যুক্ত করবে এবং আপনি কোডটি চালানোর সময় বোতামটি দৃশ্যমান করে দেবে।
root.addView(view);
আসুন পূর্ববর্তী লাইনটি সরান, এবং দেখুন যখন আমরা সংযুক্তি-ট্রুটটিকে সত্য হিসাবে সেট করি তখন কী ঘটে।
View view = inflater.inflate(R.layout.button, root, true);
আবার আমরা দেখতে পাচ্ছি বোতামের বিন্যাসটি দৃশ্যমান। এটি কারণ অ্যাটাক্টরো রুট নির্দিষ্ট করা পিতামাতার সাথে স্ফীত লেআউটটিকে সরাসরি সংযুক্ত করে। যা এই ক্ষেত্রে মূল লিনিয়ারলআউট। এখানে অ্যাড ভিউ (ভিউ ভিউ) পদ্ধতির সাহায্যে আমরা পূর্ববর্তী ক্ষেত্রে যেমন করলাম সেভাবে ম্যানুয়ালি যোগ করতে হবে না।
সংক্ষিপ্তসারগুলির জন্য সত্য হিসাবে সংযুক্তিট্রুট সেট করার সময় লোকেরা কেন অবৈধ স্ট্যাটেক্সটেকশন পাচ্ছে।
এটি কারণ কোনও খণ্ডের জন্য আপনি ইতিমধ্যে নির্দিষ্ট করেছেন যে আপনার ক্রিয়াকলাপের ফাইলে আপনার খণ্ড লেআউটটি কোথায় রাখবেন।
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.add(R.id.root, fragment)
.commit();
অ্যাড (int- পিতা বা মাতা, অসম্পূর্ণ অংশ টুকরা) টুকরা যা এর অভিভাবক লেআউটে বিন্যাস রয়েছে যোগ করা হয়েছে। আমরা যদি সংযুক্তি-রুটটিকে সত্য হিসাবে সেট করে রাখি তবে আপনি ইলিজালস্টেট এক্সপেশন পাবেন: নির্দিষ্ট সন্তানের ইতিমধ্যে একটি পিতামাতাই রয়েছে। যেহেতু টুকরা বিন্যাসটি অ্যাড () পদ্ধতিতে প্যারেন্ট লেআউটে ইতিমধ্যে যুক্ত করা হয়েছে।
আপনি যখন টুকরো টুকরো টুকরো টুকরো টানছেন তখন আপনার সর্বদা সংযুক্তিট্রু রুটের জন্য মিথ্যা পাস করা উচিত। টুকরা যোগ করা, অপসারণ এবং প্রতিস্থাপন করা ফ্রেগমেন্টম্যানেজারের কাজ।
আমার উদাহরণ ফিরে। যদি আমরা দুজনেই করি।
View view = inflater.inflate(R.layout.button, root, true);
root.addView(view);
প্রথম লাইনে, লেআউটআইনফ্লেটার বোতামের লেআউটটিকে মূল বিন্যাসে সংযুক্ত করে এবং একটি ভিউ অবজেক্ট ফেরত দেয় যা একই বোতামের লেআউটটিকে ধারণ করে। দ্বিতীয় লাইনে আমরা প্যারেন্ট মূলের বিন্যাসে একই ভিউ অবজেক্টটি যুক্ত করি। আমরা টুকরো টুকরো দিয়ে দেখেছি একই অবৈধ স্টেট এক্সসেপশন এর ফলাফল (নির্দিষ্ট সন্তানের ইতিমধ্যে একটি পিতামাতা আছে)।
মনে রাখবেন যে আরও একটি ওভারলোডেড ইনফ্লেট () পদ্ধতি রয়েছে, যা সংযুক্তি-রূটকে ডিফল্টরূপে সত্য হিসাবে সেট করে।
View inflate (int resource, ViewGroup root)