#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. Большое вам спасибо, Ибрагим, я видел это в коде привязки, но в справочном документе не так ясно, что является обязательным условием. Какое-то время это сводило меня с ума..