চাহিদা অনুযায়ী ভিউ লোড করুন

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

জটিল এবং কদাচিৎ ব্যবহৃত ভিউগুলির জন্য একটি 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 এর মতো কিছু তৈরি করে:

একটি খালি পর্দার একটি চিত্র
চিত্র 1. পর্দার প্রাথমিক অবস্থা: ViewStub ভারী বিন্যাস লুকাচ্ছে।

আপনি যখন 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);
}
চিত্র 2. ভারী বিন্যাস দৃশ্যমান।

একবার দৃশ্যমান বা স্ফীত হয়ে গেলে, ViewStub উপাদানটি আর ভিউ হায়ারার্কির অংশ নয়। এটি স্ফীত লেআউট দ্বারা প্রতিস্থাপিত হয়, এবং সেই লেআউটের রুট ভিউয়ের আইডিটি ViewStub এর android:inflatedId বৈশিষ্ট্য দ্বারা নির্দিষ্ট করা হয়। ViewStub এর জন্য নির্দিষ্ট করা ID android:id শুধুমাত্র ViewStub লেআউট দৃশ্যমান বা স্ফীত না হওয়া পর্যন্ত বৈধ।

এই বিষয় সম্পর্কে আরও তথ্যের জন্য, ব্লগ পোস্টটি স্টাবগুলির সাথে অপ্টিমাইজ করুন দেখুন।