Mencoba untuk mengatur visibilitas View
menggunakan variabel kustom, tapi kesalahan terjadi: Identifiers must have user defined types from the XML file. visible is missing it
. Apakah mungkin menyetel visibilitas tampilan menggunakan data binding? Terima kasih.
<data>
<variable
name="sale"
type="java.lang.Boolean"/>
</data>
<FrameLayout android:visibility="@{sale ? visible : gone}"/>
android
android-databinding
Konstantin Konopko
sumber
sumber
Jawaban:
Seperti yang dinyatakan dalam Panduan Pengembang Android , Anda perlu melakukannya seperti ini:
<data> <import type="android.view.View"/> <variable name="sale" type="java.lang.Boolean"/> </data> <FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>
sumber
Dalam tata letak Anda:
<data> <variable name="viewModel" type="...."/> </data> <View android:layout_width="10dp" android:layout_height="10dp" android:visibility="@{viewModel.saleVisibility, default=gone}"/>
Dalam kode java ViewModel Anda:
@Bindable public int getSaleVisibility(){ return mSaleIndecator ? VISIBLE : GONE; }
sumber
@Bindable
. Ketika saya memasukkan bahwa saya mendapatkan kesalahan pengikatan yang berbeda, termasuk saran untuk memperpanjangBaseObservable
. Poin yang bagus di siniLiveData<Boolean>
?Masalahnya adalah yang
visibility
adaInteger
diView
kelas, ini berarti Anda memiliki dua cara untuk membuat ini berfungsi:View.VISIBLE
danView.GONE
. https://developer.android.com/topic/libraries/data-binding/index.html#importsvisibility
yang membutuhkanBoolean
. https://developer.android.com/topic/libraries/data-binding/index.html#custom_settersPenerapan yang mungkin:
@BindingAdapter("android:visibility") public static void setVisibility(View view, Boolean value) { view.setVisibility(value ? View.VISIBLE : View.GONE); }
Yang mana akan
<FrameLayout android:visibility="@{sale}"/>
berhasil.sumber