Android Studio не будет создавать классы привязки

#android-databinding

#android-привязка данных

Вопрос:

У меня есть приложение для Android, которое использует функции привязки данных с Android studio 4.1.1, оно компилируется нормально, и я вижу сгенерированные классы в каталоге app / build / generated. сгенерированный DataBuildMapperImpl также в порядке и ссылается на классы привязки. у меня есть три класса привязки: один для основного действия и два для фрагментов

Теперь, если я попытаюсь создать новый фрагмент (используя Studio new Helper), он просто не создаст классы привязки, поэтому код для привязки макета не компилируется

Есть идеи о проблеме или о том, как я мог бы исследовать, например, глядя на трассировки сборки / журнал?

Вот файл макета BlankFragment

 <?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".BlankFragment">

    <TextView
        android:id="@ id/blank"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment" />

</FrameLayout>
 

и фрагмент кода

 import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import com.christophe.fretboard.databinding.FragmentBlankBinding


class BlankFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding = DataBindingUtil.inflate<FragmentBlankBinding>(
            inflater,
            R.layout.fragment_blank, container, false)
        return binding.root
    }

}
 

Ответ №1:

Это немного поздно, и вы, вероятно, поняли это к тому времени, но я все равно дам ответ для людей в будущем.

Если вы хотите, чтобы Android Studio создавала классы привязки данных, вы должны инкапсулировать свой макет с layout помощью тега следующим образом:
<layout>// your FrameLayout goes here <layout> End если имя вашего макета — fragment_example, имя класса привязки будет ExampleFragmentBinding .

Комментарии:

1. Большое вам спасибо, Ибрагим, я видел это в коде привязки, но в справочном документе не так ясно, что является обязательным условием. Какое-то время это сводило меня с ума..