Не удается разрешить AcitivityMainBinding для привязки к данным

#android #mvvm #android-architecture-components

#Android #mvvm #android-архитектура-компоненты

Вопрос:

Я пытаюсь использовать шаблон MVVM Architure, но когда я набрал ActivityMainBinding, в меню предложений ничего не появилось

Я попытался изменить имя файла XML и вернул его к исходному имени, но ничего не произошло

вот моя зависимость

 android {
compileSdkVersion 28

defaultConfig {
    applicationId "com.example.alphabet"
    minSdkVersion 16
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard- rules.pro'
    }
}
dataBinding{
    enabled = true
}
}

dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

def lifecycle_version = "2.1.0"

// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"


implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
// Because RxAndroid releases are few and far between, it is recommended you also
// explicitly depend on RxJava's latest version for bug fixes and new features.
// (see https://github.com/ReactiveX/RxJava/releases for latest 3.x.x version)
implementation 'io.reactivex.rxjava3:rxjava:3.0.0'
}
  

Основное действие

 public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

}
}
  

xml

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com   /apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<data>

</data>

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
  

…………………………………………………….

Ответ №1:

XML неверно сформирован для привязки данных, он должен быть :

 <layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <variable
            name="viewmodel"
            type="com.myapp.data.ViewModel" />
    </data>
    <ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
  

Согласно документации:https://developer.android.com/topic/libraries/data-binding корневой элемент должен быть <layout> ... </layout>

И простой способ преобразовать макет привязки данных в xml — это ввести ALT в вашем стандартном представлении корневого элемента / viewgroup в существующих макетах без привязки данных и выбрать опцию «преобразовать».