İstek üzerine görüntüleme sayısı

Bazen düzeniniz nadiren kullanılan karmaşık görünümler gerektirir. Öğe ayrıntıları, ilerleme göstergeleri veya geri alma mesajları olabilir. Görünümleri yalnızca ihtiyaç duyulduğunda yükleyerek bellek kullanımını azaltabilir ve oluşturmayı hızlandırabilirsiniz.

Karmaşık ve nadiren kullanılan görünümler için bir ViewStub tanımlayarak uygulamanızın gelecekte ihtiyaç duyacağı karmaşık görünümler olduğunda kaynakların yüklenmesini erteleyebilirsiniz.

ViewStub tanımlama

ViewStub, hiçbir şey çizmeyen veya düzene katılmayan, boyutu olmayan basit bir görünümdür. Bu nedenle, görünümü artırıp bir görünüm hiyerarşisinde bırakmak için çok az kaynak gerekir. Her ViewStub, genişletilecek düzeni belirtmek için android:layout özelliğini içerir.

Uygulamanızın kullanıcı yolculuğunda daha sonra yüklemek istediğiniz bir düzeniniz olduğunu varsayalım:

<?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>

Aşağıdaki ViewStub öğelerini kullanarak yüklemeyi erteleyebilirsiniz. Herhangi bir şeyi göstermesi veya yüklemesi için önerilen düzeni göstermesini sağlamanız gerekir:

<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 düzenini yükleme

Önceki bölümde verilen kod snippet'leri şekil 1'e benzer bir sonuç verir:

Boş ekranın resmi
Şekil 1. Ekranın ilk durumu: ViewStub yoğun düzeni gizliyor.

ViewStub tarafından belirtilen düzeni yüklemek istediğinizde setVisibility(View.VISIBLE) kodunu çağırarak veya inflate() yöntemini çağırarak düzeni görünür olarak ayarlayın.

Aşağıdaki kod snippet'i, ertelenmiş bir yükü simüle etmektedir. Ekran, Activity ve onCreate() içinde her zamanki gibi yüklenir, ardından heavy_layout_we_want_to_postpone düzeni gösterilir:

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);
}
Şekil 2. Büyük düzen görünür durumda.

ViewStub öğesi, görünür hale geldiğinde veya şişirildiğinde artık görünüm hiyerarşisinin bir parçası olmaz. Bunun yerine, büyütülmüş düzen kullanılır ve bu düzenin kök görünümünün kimliği, ViewStub öğesinin android:inflatedId özelliği ile belirtilir. ViewStub için belirtilen android:id kimliği, yalnızca ViewStub düzeni görünene veya şişirilene kadar geçerlidir.

Bu konu hakkında daha fazla bilgi için Koçlarla optimize etme başlıklı blog yayınına bakın.