web-dev-qa-db-ja.com

Android Databinding xml duplicate attribute

最近、データバインディングを使用するAndroidアプリケーションで開発を開始しました。私の問題は、このエラーのためにアプリケーションを実行できないことです。

Error:(10) Error parsing XML: duplicate attribute

このエラーは、データバインディングを使用するすべてのファイルで発生します(フラグメントを使用しています)。 3時間ほどグーグルで検索しましたが、解決策が見つかりません。

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;
    }
}

エラーが発生したxmlファイル(debug\layout\fragment_tests.xml)。 layout_widthとlayout_heightはエラーとしてマークされます:

    <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>

誰かが私を助けてくれることを本当に願っています。

編集:ここで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);
    }
}
21
Blacktasty

ソリューションが何であるかがわかりました。 <layout>定義からlayout_widthとlayout_heightを削除する必要がありました。

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

の代わりに

<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">
72
Blacktasty

xmlns:Androidは両方に自動的に追加されません<layout>および実際のレイアウトViewGroup

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <Android.support.v4.widget.DrawerLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        ...>
    </Android.support.v4.widget.DrawerLayout>
</layout>

削除する xmlns:Androidいずれかの場所から。

12
azizbekian

「xmlns」属性を2回使用していたため、エラーが発生していました。

<?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:Android="http://schemas.Android.com/apk/res/Android"
             xmlns:app="http://schemas.Android.com/apk/res-auto">
    <Android.support.constraint.ConstraintLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@color/offwhite">

以下のコードで修正

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:app="http://schemas.Android.com/apk/res-auto">
<Android.support.constraint.ConstraintLayout 
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/offwhite">
5
Abdul

<layout>フィールドからすべての属性を削除することで解決されました。つまり、

<layout>

  <data>

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

  </data>

  <LinearLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">


  </LinearLayout>
</layout>
3
Srikanth P

行を削除する

Android:layout_width="match_parent"
Android:layout_height="match_parent" 

あなたのlayout xmlのタグの下ビルドエラーが発生します。

1
Kanagalingam

定義する必要があります

Android:orientation 

プロパティをLinearLayoutに。

LinearLayoutは次のようになります。

  <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>
0
Ajith Pandian