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

Bazen düzeniniz, nadiren kullanılan karmaşık görünümler gerektirir. Yoksa öğe ayrıntıları, ilerleme göstergeleri veya iletileri geri almaksa, görüntüleme işlemlerini yalnızca hızlı bir şekilde gerçekleştirildiğinde gerekir.

Uygulamanızın yalnızca görüntülenebileceği karmaşık görünümlere sahip olduğu tanımlayarak gelecekte ihtiyaç duyabileceği Şunun için ViewStub: nadiren kullanılan görünümlerdir.

ViewStub Tanımlama

ViewStub, şunu yapmayan boyut içermeyen basit bir görünümdür: bir şeyler çizebilir veya düzene katılabilir. Bu nedenle, az sayıda kaynak gerektiriyor bir görünüm hiyerarşisinde bırakın. Her ViewStub şunları içerir: android:layout özelliğini kullanabilirsiniz.

Sitenizin kullanıcı yolculuğunda daha sonra yüklemek istediğiniz bir düzeniniz olduğunu varsayalım. uygulama:

<?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 öğesini kullanarak yüklemeyi erteleyebilirsiniz. Şunun için: herhangi bir şey gösteriyorsa veya yüklediğinde yönlendirme yapılan düzeni göstermesi 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ümdeki kod snippet'leri şekil gibi bir şey oluşturur. 1:

Boş bir ekranın resmi
Şekil 1. Ekranın ilk durumu: ViewStub ağır düzeni gizler.

ViewStub tarafından belirtilen düzeni yüklemek istediğinizde, öğesini çağırarak görünür olarak ayarlayabilirsiniz setVisibility(View.VISIBLE) veya şu numarayı arayın: inflate().

Aşağıdaki kod snippet'i, ertelenen bir yüklemeyi simüle eder. Ekran şu şekilde yüklenir: Activity ve onCreate() arasında her zamanki gibi heavy_layout_we_want_to_postpone düzeni:

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 sayfa düzeni görünür durumda.
ziyaret edin.
'nı inceleyin.

ViewStub öğesi, görünür olduğunda veya şişirildiğinde artık yer almaz hiyerarşik olarak düzenlenmiştir. Bunun yerine, şişirilmiş düzen ve bu düzenin kök görünümü, android:inflatedId tarafından belirtilir özelliği için ViewStub kullanılabilir. android:id kimliği belirtildi ViewStub için geçerli yalnızca ViewStub olduğundan emin olun.

Bu konu hakkında daha fazla bilgi için blog yayınına bakın Optimize edin koçlukla.