मांग पर व्यू लोड करें

कभी-कभी आपके लेआउट के लिए कॉम्प्लेक्स व्यू की ज़रूरत होती है, जिनका इस्तेमाल शायद ही कभी किया जाता हो. चाहे इनमें, आइटम की जानकारी, प्रोग्रेस इंडिकेटर या मैसेज को पहले जैसा किया जाता है. मेमोरी का इस्तेमाल होता है और व्यू लोड होने से रेंडरिंग की रफ़्तार बढ़ती है की ज़रूरत नहीं है.

अगर आपके ऐप्लिकेशन के व्यू जटिल हैं, तो लोड होने वाले संसाधनों को कुछ समय के लिए रोका जा सकता है तय करके यह तय करें कि इसके लिए 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 यह है छिपाए गए भारी लेआउट को छिपा दिया जाता है.

जब आपको ViewStub के बताए गए लेआउट को लोड करना हो, कॉल करके इसे 'दिखाएं' पर सेट करें setVisibility(View.VISIBLE) या कॉल करें inflate().

नीचे दिया गया कोड स्निपेट, स्थगित लोड को सिम्युलेट करता है. स्क्रीन इस तरह लोड होती है Activity और onCreate() में सामान्य है, तो यह heavy_layout_we_want_to_postpone लेआउट:

Kotlin

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

Java

@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 एलिमेंट दिखने या बढ़ा-चढ़ाकर दिखाने के बाद, एलिमेंट का हिस्सा हट जाता है के क्रम में हो सकता है. इसे इनफ़्लेटेड लेआउट से बदल दिया जाता है और उस लेआउट का रूट व्यू android:inflatedId से तय किया गया है ViewStub एट्रिब्यूट का इस्तेमाल करें. बताया गया आईडी android:id ViewStub के लिए, ViewStub तक ही मान्य है लेआउट साफ़ तौर पर दिख रहा हो या बढ़ा हुआ हो.

इस विषय के बारे में ज़्यादा जानने के लिए, यह ब्लॉग पोस्ट देखें ऑप्टिमाइज़ करें स्टब के साथ.