2017-07-21 18 views
6

android data binding hakkında okudum ve uygulamamda kullanmak istiyorum ancak xml düzen aşamasında başarısız oldum.TabHost düzeni ve DataBinding

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
<data> 
</data> 
<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/tabhost" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:layout_weight="1"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TabWidget 
     android:id="@android:id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <FrameLayout 
     android:id="@android:id/tabcontent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:id="@+id/tab1" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <include layout="@layout/tab1"/> 

     </LinearLayout> 

    </FrameLayout> 
</LinearLayout> 
</TabHost> 
</layout> 

ve tab1.xml:

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

Geçen EditText bağlanma verileri uygulamak istiyorum ama

<layout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <data> 
    </data> 
    <TabHost> 
    ... 

eklerseniz böyle activity_main.xml var

Bu

neden olur
activity_main.xml:9: AAPT: Error parsing XML: duplicate attribute 

Sorun şu ki, veri bağlama ve TabHost, birlikte verilen düzende EditText bağlamak için nasıl bir araya getirmeli?

Here is repo with code from question

+0

Neden Etiketlerinizden herhangi kapatılmamış olan

<LinearLayout android:id="@+id/tab1" /* you used tab1 here as id*/ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/tab1"/> /* you used tab1 here as id */ 
? – Codebender

+1

Bize tam xml göster – Salman500

+0

@ Salman500 burada xml sorgusundan http://github.com/davemilter/TabHostDataBinding/tree/master/app/src/main/res/layout – user1244932

cevap

2

İşte ipucu XML: duplicate attribute bu. Hatta, TabHost öğesinin içinde bulunan 9 numaralı hata iletisinde bir satır numarası bile söyler.

Şimdi hangi XML özniteliği kopyalanıyor? ad (xmlns:android)

Sadece bundan xmlns:android="http://schemas.android.com/apk/res/android" ve bitti kaldırmak

+1

Bu satır özellikle xmlns: android = "http://schemas.android.com/apk/res/android" Bu sorunun nasıl iki tane var olduğunu bilmiyorum! – Debanjan

1

Sayı xmlns:android

ile düzen etiketindeki XML en üst ayağında olmayan birinin çıkarın. DataBinding İlişkin

i bile

<include layout="@layout/tab1" 
     app:name="@{name}"/> 

Şimdi ürünle birlikte düzeniyle activity_main.xml

<data> 

    <variable 
     name="name" 
     type="String"/> 

</data> 

Geçidi bunun içinde <data> almasını etiketi dışında bu özelliği ekledik öyle düşünmüyorum tab1.xml

012 içindeki verilerinizi yakalayınNeredeyse yapılır
<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <data> 
     <variable 
      name="name" 
      type="String"/> 
    </data> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <EditText 
      android:id="@+id/edit1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_column="1" 
      android:layout_row="0" 
      android:ems="1" 
      android:inputType="text" 
      android:text="@{name}" /> 
    </LinearLayout> 
</layout> 

, şimdi sadece burada görebilmesi için aktivitesinde

ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main); 
binding.setName("Email Address"); 
0

İki hataları bağlayıcı uygulamak gerekiyorsa, xmlns adı boşluk iki kez ve tab1 kimliği iki kez kullanılır. Bir ad alanını kaldırın ve kimliği değiştirin.