17

uyarı:veri bağlama - i ve 2.3.0 için AS gradle sürümünü yükselttikten sonra safeUnbox, karşılaşma bir uyarı bağlayıcı veri

Uyarı: selectMap [index] bir kutulu alandır ancak un-kutulu gerekiyor selectMap [index] çalıştırılsın mı? @android: color/white: @android: renk/saydam. Bu, NPE'ye neden olabilir, bu nedenle Veri Bağlama, güvenli bir şekilde paketinden çıkarır. Sen ifadeyi değiştirmek açıkça selectMap bir ObservableMap olan

uyarısını engellemek için safeUnbox ile selectMap [index]() sarmak, sonra ben bu uyarıyı arama ancak sadece birkaç tartışmalar var ve ona

sorunu çözmedi Android Studio 2.3.0-alpha1: Databinding + int unboxing causes compile errors

Databinding - data object is null on API 15-18

Ben safeUnbox(selectMap[index]) için selectMap[index] değiştirmek bağlantıları yolunu izleyin ama sözdizimi hatası var.

Bu uyarı nasıl düzeltileceğini bilen var mı?


Düzenleme

: Burada xml dosyası kodunu

<?xml version="1.0" encoding="utf-8"?> 

<data class="SupportCountryViewHolderBinding"> 

    <variable 
     name="viewModel" 
     type="com.goodarc.care_about.activity.account.support_country.SupportCountryHolderViewModel" /> 

    <variable 
     name="dataSource" 
     type="com.goodarc.care_about.module.assets_file.SupportCountry" /> 

    <variable 
     name="selectMap" 
     type="android.databinding.ObservableMap&lt;Integer, Boolean&gt;" /> 

    <variable 
     name="index" 
     type="int" /> 
</data> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@{selectMap[index] ? @android:color/white : @android:color/transparent}" 
    android:onClick="@{(v) -> viewModel.onItemSelectListener(selectMap, index)}" 
    android:orientation="vertical" 
    android:padding="20dp"> 

    <TextView 
     style="@style/TitleLabel2" 
     android:layout_gravity="center_vertical|start" 
     android:text="@{dataSource.display}" 
     android:textColor="@{selectMap[index] ? @android:color/black : @android:color/white}" 
     tools:text="Taiwan (+886)" /> 
</LinearLayout> 

Yapı başarılı olmakla birlikte, (i yukarıda geçmiş) çıkıp uyarıdır.

<variable 
     name="readOnly" 
     type="Boolean" /> 

için: Nereden

:

<variable 
     name="readOnly" 
     type="boolean" /> 
+1

soru size kodudur çalışacak? – pskink

cevap

15

Ben sorunu çözmek Boole tip için boolean türünden değişken bildiriminde değişen benim durumumda, aynı uyarı vardı

Yani, belki de deneyebilirsiniz:

<variable 
    name="selectMap" 
    type="android.databinding.ObservableMap&lt;Integer, boolean&gt;" /> 
+0

Strings ile aynı sorunla karşılaştın mı?Benim durumumda sadece Boolean –

+0

ile oldu Üzgünüz dize ile sorun yoktu başka bir şey oldu AFAIR – Killer

4

Böyle safeUnbox ekleyebilirsiniz:

android:text="@{Double.toString(safeUnbox(product.listPrice))}" 
+0

Bence safeUnbox basit bir çözümdür. public static boolean safeUnbox (java.lang.Boole boxed) {return boxed == null? false: (boolean) kutulu; android.databinding.DynamicUtil içinde} '' ' – illusionJJ

0

bu kadar iyi olabilir bir BaseObservable yılında. Türü Boolean'dan boole'ye güncellemem gerekiyordu.

@Bindable 
public boolean getAvoidXpressway() { 
    return commute.getAvoidXpressway(); 
} 

public void setAvoidXpressway(Boolean avoidXpressway) { 
    commute.setAvoidXpressway(avoidXpressway); 
    notifyPropertyChanged(BR.avoidXpressway); 
} 

sen benim durumumda gibi harici bir nesne kullanarak bağlama yapılıyorsa tip dönüş Ayrıca, boole olduğundan emin olun; aksi halde uyarı patlamaya devam edecektir.

0

bu uyarı gitmiş yapacak uyarı değişkene safeUnbox() ekleyin ve hala iyi

android:alpha="@{alpha != null ? safeUnbox(alpha) : 0.5f}"