2016-10-18 22 views
8

Niedawno zacząłem rozwijać na Android aplikacji, która używa databinding. Moim problemem jest to, że teraz nie mogę uruchomić aplikację z powodu tego błędu:Android Databinding xml duplikat atrybutu

Error:(10) Error parsing XML: duplicate attribute 

Błąd występuje w każdym pliku za pomocą wiązania z danymi (używam fragmentów). Przez 3 godziny szukałem go w Google i nie mogę znaleźć rozwiązania.

build.gradle:

apply plugin: 'com.android.application' 

android { 
    dexOptions { 
     preDexLibraries = false 
     javaMaxHeapSize "2g" 
    } 
    compileSdkVersion 23 
    buildToolsVersion "23.0.3" 
    defaultConfig { 
     applicationId "at.blacktasty.schooltoolmobile" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    dataBinding { 
     enabled = true 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile files('libs/eneter-messaging-android-7.0.1.jar') 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:design:23.4.0' 
    compile 'com.android.support:support-v4:23.4.0' 
    testCompile 'junit:junit:4.12' 
} 

fragment_tests.xml:

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="layout.tests"> 

    <data> 
     <variable 
      name="deadline" 
      type="at.blacktasty.schooltoolmobile.viewmodel.STViewModel"/> 
    </data> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:id="@+id/list_tests" 
      android:entries="@{deadline.deadline}"/> 
    </LinearLayout> 
</layout> 

tests.java:

package layout; 

import android.databinding.DataBindingUtil; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import at.blacktasty.schooltoolmobile.R; 
import at.blacktasty.schooltoolmobile.databinding.FragmentSyncBinding; 
import at.blacktasty.schooltoolmobile.databinding.FragmentTestsBinding; 
import at.blacktasty.schooltoolmobile.viewmodel.STViewModel; 

/** 
* A simple {@link Fragment} subclass. 
* create an instance of this fragment. 
*/ 
public class tests extends Fragment { 
    private STViewModel stViewModel; 

    public tests() { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     stViewModel = new STViewModel(); 
     FragmentTestsBinding binding = DataBindingUtil.inflate(
       inflater, R.layout.fragment_tests, container, false); 
     View view = binding.getRoot(); 
     binding.setDeadline(stViewModel); 


     return view; 
    } 
} 

i plik xml, gdzie występuje błąd (debug \ layout \ fragment_tests.xml). layout_width i layout_height są oznaczone jako błąd:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" android:tag="layout/fragment_tests_0" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="layout.tests"> 
    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/list_tests" 
     android:tag="binding_1"    /> 
</LinearLayout> 

Naprawdę mam nadzieję, że ktoś może mi pomóc.

EDIT: Tutaj klasa STViewModel:

public class STViewModel extends BaseObservable { 
    private ObservableArrayList<Deadline> m_deadline = new ObservableArrayList<>(); 

    @Bindable 
    public ObservableArrayList<Deadline> getDeadline(){ 
     return m_deadline; 
    } 

    public void setDeadline(ObservableArrayList<Deadline> value){ 
     m_deadline = value; 
     notifyPropertyChanged(BR.deadline); 
    } 
} 
+0

masz '' STViewModel' deadline' wewnątrz? –

+0

Tak, termin jest w STViewModel, dodałem klasy do mojego pytania. – Blacktasty

+0

spróbuj zmienić jego nazwę, może to rozwiązać problem. –

Odpowiedz

31

Właśnie dowiedziałem się, co jest rozwiązaniem. Właśnie musiałem usunąć layout_width i layout_height z definicji <layout>.

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
tools:context="layout.tests"> 

zamiast

<layout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="layout.tests"> 
+0

działa jak czar –

+0

Czasami trzeba wygląd zamknięcie .solution jest zawsze ukryte w problemie. – Nirmal

0

Należy określić

android:orientation 

właściwość LinearLayout.

Twój LinearLayout powinno być tak,

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:tag="layout/fragment_tests_0" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    tools:context="layout.tests"> 
    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/list_tests" 
     android:tag="binding_1" /> 
    </LinearLayout> 
+1

Niestety błąd nadal występuje – Blacktasty

Powiązane problemy