我在我的项目中使用数据绑定,当使用时<layout>,<data>我的xml绑定类中没有生成.
例如,我有activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data> </data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</RelativeLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
现在,如果我ActivityMainBinding在我的活动/片段中写入,则显示该类不可用的错误.但是<variable>在我的xml文件中包含它后,它能够生成ActivityMainBinding类.
Android Studio:2.1.3
Classpath:com.android.tools.build:
grad :2.1.3
minSdkVersion 16
targetSdkVersion 24
buildToolsVersion 24.0.0
谷歌文档说,变量可以从包含布局传递到包含布局的绑定,但我无法使其工作,但是获取数据绑定错误****msg:标识符必须具有XML文件中的用户定义类型.处理程序缺少它.包含XML看起来像这样:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data>
<import type="com.example.FocusChangeHandler"/>
<variable
name="handler"
type="FocusChangeHandler"/>
</data>
<!-- Some other views --->
<include
android:id="@+id/inputs"
layout="@layout/input_fields"
bind:handler="@{handler}"/>
</layout>
Run Code Online (Sandbox Code Playgroud)
包含的XML就像这样:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<EditText
android:id="@+id/nameEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onFocusChange="@{handler.onFocusChange}"/>
</layout>
Run Code Online (Sandbox Code Playgroud)
我能够通过生成的绑定类引用包含布局的视图,但传递变量不起作用.
是否可以让数据绑定给我一个对活动布局内片段的引用?
我的活动在 FrameLayout 中有一个片段,我得到这样的数据绑定:
fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityUxBinding = DataBindingUtil.setContentView(this, R.layout.activity_ux)
Run Code Online (Sandbox Code Playgroud)
自动生成的 ActivityUxBinding 不包含片段的成员,所以我仍然必须这样做:
arFragment = supportFragmentManager.findFragmentById(R.id.ux_fragment) as ArFragment
Run Code Online (Sandbox Code Playgroud)
有没有办法获得布局中指定类型的成员 uxFragment ?
作为参考,活动的布局:
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment android:name="edu.htw.cd.ar.objectdetect.sceneform.ArFragmentWithoutInstructions"
android:id="@+id/ux_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/search_fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="16dp"
app:srcCompat="@drawable/ic_search"
app:elevation="6dp" /> <!-- https://material.io/design/environment/elevation.html -->
</FrameLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)