কখনও কখনও আপনার লেআউটের জটিল দৃশ্যের প্রয়োজন হয় যা খুব কমই ব্যবহৃত হয়। সেগুলি আইটেমের বিশদ বিবরণ, অগ্রগতি সূচক বা পূর্বাবস্থায় বার্তাগুলিই হোক না কেন, আপনি মেমরির ব্যবহার কমাতে পারেন এবং শুধুমাত্র যখন প্রয়োজন হয় তখনই দৃশ্যগুলি লোড করে রেন্ডারিংয়ের গতি বাড়াতে পারেন৷
জটিল এবং কদাচিৎ ব্যবহৃত ভিউগুলির জন্য একটি ViewStub
সংজ্ঞায়িত করে আপনার অ্যাপের ভবিষ্যতে প্রয়োজন এমন জটিল ভিউ থাকলে আপনি সম্পদ লোড করা পিছিয়ে দিতে পারেন।
একটি ViewStub সংজ্ঞায়িত করুন
ViewStub
হল একটি লাইটওয়েট ভিউ যার কোনো মাত্রা নেই যা কিছু আঁকে না বা লেআউটে অংশগ্রহণ করে না। যেমন, এটিকে স্ফীত করার জন্য এবং একটি দৃশ্যের শ্রেণিবিন্যাস রেখে যাওয়ার জন্য কয়েকটি সংস্থান প্রয়োজন। প্রতিটি ViewStub
android:layout
অ্যাট্রিবিউট অন্তর্ভুক্ত থাকে যাতে স্ফীত করার লেআউট নির্দিষ্ট করা যায়।
ধরুন আপনার একটি লেআউট আছে যা আপনি আপনার অ্যাপের ব্যবহারকারীর যাত্রায় পরে লোড করতে চান:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:src="@drawable/logo" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout>
আপনি নিম্নলিখিত ViewStub
ব্যবহার করে লোডিং স্থগিত করতে পারেন। এটি দেখাতে বা কিছু লোড করতে, আপনাকে অবশ্যই এটিকে উল্লেখিত লেআউটটি দেখাতে হবে:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent"> <ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/heavy_layout_we_want_to_postpone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> </FrameLayout>
ViewStub লেআউট লোড করুন
পূর্ববর্তী বিভাগে কোড স্নিপেটগুলি চিত্র 1 এর মতো কিছু তৈরি করে:
আপনি যখন ViewStub
দ্বারা নির্দিষ্ট করা লেআউটটি লোড করতে চান, হয় setVisibility(View.VISIBLE)
কল করে অথবা inflate()
কল করে দৃশ্যমান হিসেবে সেট করুন।
নিম্নলিখিত কোড স্নিপেট একটি স্থগিত লোড অনুকরণ করে। Activity
এবং onCreate()
এ স্ক্রীনটি স্বাভাবিকভাবে লোড হয়, তারপর এটি heavy_layout_we_want_to_postpone
লেআউট দেখায়:
কোটলিন
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_old_xml) Handler(Looper.getMainLooper()) .postDelayed({ findViewById<View>(R.id.stub_import).visibility = View.VISIBLE // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate() }, 2000) }
জাভা
@Override void onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_old_xml); Handler(Looper.getMainLooper()) .postDelayed({ findViewById<View>(R.id.stub_import).visibility = View.VISIBLE // Or val importPanel: View = findViewById<ViewStub>(R.id.stub_import).inflate() }, 2000); }
একবার দৃশ্যমান বা স্ফীত হয়ে গেলে, ViewStub
উপাদানটি আর ভিউ হায়ারার্কির অংশ নয়। এটি স্ফীত লেআউট দ্বারা প্রতিস্থাপিত হয়, এবং সেই লেআউটের রুট ভিউয়ের আইডিটি ViewStub
এর android:inflatedId
বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা হয়। ViewStub
এর জন্য নির্দিষ্ট করা ID android:id
শুধুমাত্র ViewStub
লেআউট দৃশ্যমান বা স্ফীত না হওয়া পর্যন্ত বৈধ।
এই বিষয় সম্পর্কে আরও তথ্যের জন্য, ব্লগ পোস্টটি স্টাবগুলির সাথে অপ্টিমাইজ করুন দেখুন।