标签: android-databinding

如何正确使用android数据绑定

我有以下带有数据绑定的 XML:

<EditText
    android:id="@+id/addvalue"
    android:inputType="numberDecimal"
    android:digits="0123456789,€"
    android:text="0,00 €"/>
<Button
    android:id="@+id/add"
    android:onClick="@{() -> fragment.addManualPosition(addvalue.text)}"/>
Run Code Online (Sandbox Code Playgroud)

我收到错误

"data binding error ****msg:if getId is called on an expression, it should have an id: addvalue.text"
Run Code Online (Sandbox Code Playgroud)

我根本找不到任何可以帮助我理解此错误的含义或如何修复它的内容。

android android-databinding

4
推荐指数
1
解决办法
683
查看次数

数据绑定布局约束

我在添加要查看的结束约束时遇到问题

 <android.support.constraint.ConstraintLayout
    android:id="@+id/chatDocumentMessageContent"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@{chatMessage.corespondent==Corespondent.Sent? @drawable/very_rounded_corners_gray_background:@drawable/very_rounded_corners_orange_background}"
    android:maxWidth="300dp"
    android:minWidth="140dp"
    android:onClick="@{clickListener::onClick}"
    android:padding="@dimen/padding_large"
    app:layout_constraintEnd_toEndOf="@{chatMessage.corespondent==Corespondent.Sent? ConstraintSet.PARENT_ID:ConstraintSet.UNSET}">
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

[kapt] 发生异常:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误。****/ 数据绑定错误 ****msg:在 android.support.constraint.ConstraintLayout 上找不到参数类型为 int 的属性“app:layout_constraintEnd_toEndOf”的设置器。

尝试添加以下适配器,但仍然无法正常工作:

 @BindingAdapter(" app:layout_constraintEnd_toEndOf")
    fun setEndConstraint(guideline: Guideline, resource: Int) {
        val params = guideline.getLayoutParams() as ConstraintLayout.LayoutParams
        params.endToEnd = resource
        guideline.layoutParams = params
    }
Run Code Online (Sandbox Code Playgroud)

android android-databinding android-constraintlayout

4
推荐指数
1
解决办法
1617
查看次数

LiveData 与 Observable 数据对象

根据LiveData 文档,其中一项功能被设计为使用可观察模式通知数据更改。(除此之外,LiveData 还提供了许多其他有前途的功能)

另一方面,Observable data object基于其文档的数据库能够通知其他人其数据的变化。

结果,这两个功能看起来是相同的。

问题是:

LiveData与其他功能一起使用不是更好吗?

android-databinding android-livedata android-jetpack

4
推荐指数
1
解决办法
5202
查看次数

当所有 EditText 完成时启用按钮

当表单中的所有字段都完成时,我想启用 AppCompatButton。

我正在使用 ViewModel 并希望使用数据绑定来启用它。

当视图上的文本更改以更新视图模型中的对象数据时,我有两种方法会触发。

我遇到的问题是当两个字段都完成时,我需要在布局上启用一个按钮以允许它们继续。

一个例子是登录,当用户名和密码字段填满时,登录按钮变为启用。

android android-databinding android-viewmodel

4
推荐指数
1
解决办法
3775
查看次数

数据绑定 - ObservableField&lt;String&gt; 不更新视图

我有一个简单的应用程序——Button它从 rest api 中获取数据以及TextView显示此数据的位置。我正在使用MVVM架构模式。当ViewModel收到带有获取数据的回调时,我将其设置为 ObservableField。不幸的是它不会更新屏幕上的文本,但是每当我旋转设备数据时都会在屏幕上更新。

好了,废话不多说,我给你看代码:

视图模型

public class MyViewModel extends ViewModel{

private ObservableField<String> name = new ObservableField<>();

@Override
public void onListReceived(String username) {
    super.onListReceived(list);
    name.set(username);
}

public String getName() {
    return name.get();
}}
Run Code Online (Sandbox Code Playgroud)

并在 XML 中:

<TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{viewModel.name}"
        tools:text="some text"/>
Run Code Online (Sandbox Code Playgroud)

据我所知,我认为android:text="@{viewModel.name}"在 ' @' 和 ' {'之间的这一行中它应该是 '=' ,但是当我添加它时,清理项目并重建它,我得到了一个无法解决的错误DataBindingComponent

有任何想法吗?
提前致谢!

android android-databinding

4
推荐指数
1
解决办法
891
查看次数

错误:数据绑定错误消息:“视图”节点没有类属性

在android中实现了dataBinding,但在编译时抛出错误

XML 代码

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:layout_width="match_parent"
        android:layout_height="@dimen/sw360dp_260dp"
        android:layout_marginTop="@dimen/sw360dp_45dp"
        android:background="@drawable/apply_jobs_background_xhdpi" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/toolbar"
        android:layout_marginStart="@dimen/sw360dp_40dp"
        android:layout_marginTop="@dimen/sw360dp_20dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/applyJobsCompanyName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/amarnath_regular"
            android:hint="Company Name"
            android:textColor="@color/white"
            android:textSize="@dimen/sw360dp_18sp"
            android:textStyle="bold" />
    </LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我的错误

数据绑定错误****msg:“视图”节点文件没有类属性:C:\Users\Aayush\AndroidStuidoProjects\SkillDostiJobs\app\src\main\res\layout\activity_apply_jobs.xml

xml android android-databinding

4
推荐指数
1
解决办法
1690
查看次数

Android 数据绑定@{} vs @={}

我在文档中找不到@{}vs之间的区别 。@={}

有什么不同?

android android-databinding

4
推荐指数
1
解决办法
370
查看次数

如何将数据变量传递给包含的布局?

有没有办法将数据变量传递给包含的布局?

父布局

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn="@layout/fragment_settings">

    <data>

        <variable
            name="viewModel"
            type="......settings.SettingsFragmentViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:animateLayoutChanges="true"
        android:overScrollMode="never"
        android:padding="@dimen/spacing_default">

        <include
            android:id="@+id/main"
            layout="@layout/layout_settings_main" />

    </androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

并希望在包含的布局中包含 viewModel

<layout 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"
    tools:showIn="@layout/fragment_settings">

    <data>

        <variable
            name="viewModel"
            type="......settings.SettingsFragmentViewModel" />
    </data>

    <merge>
...........
Run Code Online (Sandbox Code Playgroud)

还是只有在这样设置时才可能:

 binding = FragmentSettingsBinding.inflate(inflater, container, false).apply {
            lifecycleOwner = this@SettingsFragment
            viewModel = this@SettingsFragment.viewModel
            main.viewModel = this@SettingsFragment.viewModel
        }
Run Code Online (Sandbox Code Playgroud)

android viewmodel android-databinding

4
推荐指数
1
解决办法
2759
查看次数

未知数据绑定属性:onLongClick - 属性存在且有效

在我的数据绑定布局中,我通过以下方式设置了长按侦听器:

android:onLongClick="@{ ..binding expression.. }"
Run Code Online (Sandbox Code Playgroud)

代码按预期运行,但该android:onLongClick属性在 xml 文件中被标记为“未知”。此外,它没有自动完成功能。

此属性的绑定适配器包含在 中的数据绑定库中ViewBindingAdapter.java

android android-databinding

4
推荐指数
1
解决办法
1418
查看次数

AndroidX 迁移后应用程序崩溃(数据绑定错误)

我正在尝试将一个已有 3 年历史的项目迁移到 AndroidX。该项目有3个模块。

  • 应用程序
  • 软件开发工具包
  • 蜜蜂

app是主要模块。该项目在运行时构建sdkapis模块的AAR 文件。并且该应用程序使用sdkapis

我为迁移所做的更改是:

  1. 更新了 app.gradle 和 gradlewrapper 属性的目标版本
  2. 迁移到 AndroidX
  3. 更新了所有模块的所有依赖项。

当应用程序启动时,它会从应用程序模块启动一个工作正常的活动。紧接着它从sdk模块启动一个活动。但是这里应用程序在 DataBindingUtil.setContentView 处崩溃。所有 3 个模块都启用了数据绑定。下面是堆栈跟踪。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/databinding/library/baseAdapters/DataBinderMapperImpl;
    at com.xyz.sdk.DataBinderMapperImpl.collectDependencies(DataBinderMapperImpl.java:274)
    at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:58)
    at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:60)
    at androidx.databinding.DataBinderMapperImpl.<init>(DataBinderMapperImpl.java:5)
    at androidx.databinding.DataBindingUtil.<clinit>(DataBindingUtil.java:32)
    at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
    at com.xyz.sdk.landing.LandingPageActivity.onCreate(LandingPageActivity.java:51)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669) …
Run Code Online (Sandbox Code Playgroud)

android gradle android-databinding androidx

4
推荐指数
1
解决办法
1784
查看次数