标签: android-databinding

是否可以在@Bindable上添加onOnPropertyChangedCallback?

我想观察一个@Bindable通过Java,可以吗?

我读到我可以在此答案上观察到ObservableField:https : //stackoverflow.com/a/31885802/858257

但有时您需要原始字段,而最好的方法是使用@Bindable

android android-databinding

0
推荐指数
1
解决办法
1253
查看次数

带空检查的双向绑定

在数据绑定适配器中,我想检查int模型中的值是否不为零。因为从不显示提示,如果默认值为 0,则 0 显示为文本。如果值为零,我想显示提示。

下面无需检查 0 int 值即可正常工作

   <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/port"
                android:inputType="number"
                android:text="@={`` + item.port}"
                />
Run Code Online (Sandbox Code Playgroud)

我试过这个不起作用

   <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/port"
                android:inputType="number"
                android:text='@={item.port != 0 ? `` + item.port : ""}'
                />
Run Code Online (Sandbox Code Playgroud)

item.portint价值

有什么建议可以只使用数据绑定来完成这项工作吗?

data-binding android android-databinding

0
推荐指数
1
解决办法
2437
查看次数

错误:找不到符号 DaoSession 和 DaoMaster

我在我的应用程序中使用 GreenDao。为调试构建启用 Proguard。

添加数据绑定支持后,出现以下问题:

/app/src/main/java/com/example/MainApplication.java:29: 错误:找不到符号

私有 DaoSession mDaoSession;

      ^   
Run Code Online (Sandbox Code Playgroud)

符号:类 DaoSession
位置:类 Main Application

同样的问题即将到来DaoMaster

另外,这个问题来了:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:kaptDebugKotlin'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:103)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
Run Code Online (Sandbox Code Playgroud)

应用程序 build.gradle:

apply plugin: 'kotlin-kapt'
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
//For green dao
apply plugin: 'org.greenrobot.greendao'

buildscript {
    ext.kotlin_version = '1.2.41'
    ...
}
android {
    aaptOptions.cruncherEnabled = false
    aaptOptions.useNewCruncher = false
    ...
    }
    dataBinding {
        enabled = true
    }

    buildTypes {
        debug {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' …
Run Code Online (Sandbox Code Playgroud)

java android gradle kotlin android-databinding

0
推荐指数
1
解决办法
1251
查看次数

当与DataBinding一起使用时,LiveData不会将更改通知给UI

我想将UI LiveData与DataBinding一起使用时进行更改。但是随着LiveData变化,它并不能反映UI的变化。

MainViewModel.java

public class MainViewModel extends AndroidViewModel {
    /**
     * Boolean variable to see whether user is ClockedIn or ClockedOut
     */
    public MutableLiveData<Boolean> isClockedIn;

    public MainViewModel(Application application) {
        super(application);
        isClockedIn = new MutableLiveData<>();
        //...
        calculateClockedInOrNot(PreferencesManager.getString(mContext,PreferencesManager.CLOCK_STATUS_KEY));
    }

    /**
     * An utility function to calculate whether user is clocked in or clocked out,
     * this function is also called within this ViewModel after an api hit
     *
     * if string == "CLOCKED_OUT" or string == "mobileEventType.CLOCK_OUT" => user …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-databinding android-architecture-components

0
推荐指数
1
解决办法
1565
查看次数

Android 为什么使用 ExecutePendingBindings

我最近一直在使用数据绑定,并且遇到了 executePendingBindings 方法。文档几乎没有显示,我可以理解它是如何工作的或何时使用它。这是该方法用法的示例。

请举例说明使用和不使用它的区别。谢谢

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {

            Customer customer= List.get(position).second;

            ((CustomerViewHolder)holder).binding.setCustomer (customer)
            ((CustomerViewHolder)holder).binding.executePendingBindings();

}
Run Code Online (Sandbox Code Playgroud)

data-binding android android-databinding

0
推荐指数
2
解决办法
1917
查看次数

数据绑定无法使用 String.function() 调用静态函数

我有一个格式化一些文本的函数

fun String.formatTo(): String {
    if (this.isNotEmpty()) {
        val value = this.toDouble()
        return "%.02f".format(value)
    }
    return ""
}
Run Code Online (Sandbox Code Playgroud)

我想使用数据绑定将这种乐趣应用到我的 textView 中,所以我调用了 textView ,在我的布局android:text="@{viewModel.text.formatTo()}"中导入类data

<data>
    <import type="com.project.utils.extensions.ExtKt"/>

    <variable
        name="viewModel"
        type="com.project.ViewModel" />
</data>
Run Code Online (Sandbox Code Playgroud)

但我在构建时遇到了错误:

Found data binding errors.
****/ data binding error ****msg:cannot find method formatTo() in class java.lang.String
Run Code Online (Sandbox Code Playgroud)

什么是问题?

android kotlin android-databinding

0
推荐指数
1
解决办法
2000
查看次数

如何使用数据绑定动态更新微调项

我正在使用数据绑定应用自定义微调器。我以前从资源字符串数组传递数组,现在我从服务器获取数据,我需要将该数组放入微调器,那么我如何动态地做到这一点?就像这里我使用 android:entries 属性问题:如果从 API 获取数据,如何更新我的微调器值?

  <data>

    <variable
        name="model"
        type="com.abc.online.viewmodels.StoreHomeViewModel" />
</data>
<Spinner
                android:id="@+id/isspSelectCity"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:entries="@array/country_code_list"
                android:gravity="center"
                android:onItemSelected="@{(parent,view,pos,id)->model.onCitySelectItem(parent,view,pos,id)}" />
        </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我正在更换

android:entries="@array/country_code_list"
Run Code Online (Sandbox Code Playgroud)

android:entries="@{model.fetchCountriesCode()}"
Run Code Online (Sandbox Code Playgroud)

这是获取城市的功能

    public List<String> fetchCountriesCode(){
    List<String> list=new ArrayList<>();
    if (getCitiesObj().getValue()!=null) {
        Result[] cities = getCitiesObj().getValue().get(0).getResult();
        for (Result cit : cities) {
            list.add(cit.getName());
        }
    } return list;}
Run Code Online (Sandbox Code Playgroud)

android:entries 如果我们在渲染之前已经列出了值,则它不会在渲染后采用/更新值。那么我该怎么做呢?

android spinner android-databinding

0
推荐指数
1
解决办法
678
查看次数

数据绑定找不到标识符“视图”

<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"
>
<data>
    <variable
        name = "registrationViewModel"
        type="com.android.freecommunity.ui.auth.AuthViewModel"/>
</data>

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipChildren="false"
    android:clipToPadding="false"
    tools:context=".ui.auth.Register">


    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="352dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/intro_background" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintLayout"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginStart="32dp"
        android:layout_marginEnd="32dp"
        android:layout_marginBottom="32dp"
        android:background="@drawable/round_layout_container"
        android:clipChildren="false"
        android:clipToPadding="false"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="1.0">

        <EditText
            android:id="@+id/editText"
            android:layout_width="0dp"
            android:layout_height="45dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            android:background="@drawable/round_edit_text"
            android:drawableLeft="@drawable/user"
            android:drawablePadding="16dp"
            android:ems="10"
            android:hint="Fullname"
            android:text="@={registrationViewModel.fullName}"
            android:inputType="phone"
            android:paddingStart="16dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/imageView2" />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="16dp"
            android:background="@drawable/round_edit_text"
            android:drawableLeft="@drawable/email"
            android:drawablePadding="16dp"
            android:ems="10"
            android:hint="Email Address"
            android:text="@={registrationViewModel.email}"
            android:inputType="textEmailAddress"
            android:paddingStart="16dp"
            app:layout_constraintEnd_toEndOf="parent" …
Run Code Online (Sandbox Code Playgroud)

xml android android-databinding

0
推荐指数
2
解决办法
3047
查看次数

当构建因“错误:无法解析类型'someType'”而失败时,如何调试Android数据绑定?

不幸的是我已经经常遇到这个问题了。在我的 Android 项目中,我使用databinding将类绑定到我的 xml 布局,效果很好。基本上我是按以下方式进行的:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
  <data>
    <variable name="myClass" type="com.somepackagename.myClass" />
  </data>
</layout>
Run Code Online (Sandbox Code Playgroud)

在我的(相当大的)项目中,我经常对variable name许多不同的 xml 布局使用相同的布局。

经过大量重构后,由于以下构建错误,我现在无法再构建项目:

e: error: Cannot resolve type 'myClass'
e: error: cannot generate view binders android.databinding.tool.util.LoggedErrorException:       failure, see logs for details.
Cannot resolve type 'myClass'
    at android.databinding.tool.util.L.printMessage(L.java:134)
    at android.databinding.tool.util.L.e(L.java:107)
    at android.databinding.tool.expr.Expr.getResolvedType(Expr.java:386)
    at android.databinding.tool.expr.ExprModel.lambda$resolveTypes$1(ExprModel.java:618)
 ...
Run Code Online (Sandbox Code Playgroud)

虽然 errorMessage 对我来说很清楚并告诉我哪个变量名导致了这个问题,但不幸的是它不是很详细并且没有告诉我:

  • 哪个 xml 文件导致此问题
  • 哪种特定类型会导致此问题

如果您更改了许多 xml 布局,那么很难找到导致问题的原因。

难道没有更好的方法来调试此类错误吗?

data-binding android android-databinding

0
推荐指数
1
解决办法
1572
查看次数

如何在活动之间共享 viewModel?

我现在正在学习 Android ViewModel。我有 MainActivity 和 RegisterActivity ,它们可以在其中输入姓名、年龄和电话号码。在 RegisterActivity 中输入该信息后,我将该信息放入 ViewModel 并单击一个按钮并完成 RegisterActivity。问题是,我想在 MainActivity 中显示信息。那么如何在两个活动之间共享 viewModel 呢?我必须使用什么概念?

android android-databinding android-viewmodel

0
推荐指数
1
解决办法
437
查看次数

RowCategoryBinding 找不到符号

错误信息

C:\FWE\Android\app\build\generated\data_binding_base_class_source_out\debug\out\com\test\app\databinding\RowCategoryBinding.java:14: error: cannot find symbol
     import com.test.app.Models;

symbol:   class Models

location: package com.test.app
Run Code Online (Sandbox Code Playgroud)

关于RowCategoryBinding.java:14,它包含这个

import com.test.app.Models;
Run Code Online (Sandbox Code Playgroud)

CategoriesModel.java如果我将文件放入 Models 文件夹中,则会出现错误

com.test.app
|
--- Adapters
--- Activites
--- Fragments
--- Models
    |
    --- CategoriesModel.java
--- Interfaces
--- Utils
--- ViewModels
Run Code Online (Sandbox Code Playgroud)

但是,如果我将CategoriesModel.java文件移到模型之外,那么该应用程序将正常运行而不会出现错误。是什么原因?

com.test.app
|
--- Adapters
--- Activites
--- Fragments
--- Models
--- Interfaces
--- Utils
--- ViewModels
--- CategoriesModel.java
Run Code Online (Sandbox Code Playgroud)

android android-databinding

0
推荐指数
1
解决办法
537
查看次数

使用数据绑定库时,需要调用DataBindingUtil.setContentView()吗?

我正在学习使用数据绑定库。我知道,它消除了手动调用findViewById()的需要,并使代码更加健壮和易读。

为了了解其用途,我做了以下工作:

  1. 制作了一个temp_layout.xml,其中包含2个ID为'tv1'和'tv2'的文本视图

  2. <layout>标签添加为根

  3. 点击“构建项目”

现在,我发现有一个新的'TempLayoutBinding'类可用,其中包含变量'tv1'和'tv2'。

我的问题是,即使我已经<layout>在temp_layout.xml中指定了标签,为什么还需要调用mBinding = DataBindingUtil.setContentView(...)?具体是做什么的?

performance android android-databinding

-2
推荐指数
1
解决办法
3071
查看次数

为什么在android中使用MVVM而不是MVC

我所知道的

  • 我已经在 android 中使用 MVC 一段时间了
  • 现在我正在学习 MVVM 和数据绑定
  • 我知道两者之间的架构差异

问题

  • MVVM 的使用对 MVC 有何优势
  • 在 MVVM 中使用 ViewModel 进行自动化单元测试有什么优势
  • 与 MVC 相比,我们在 MVVM 中编写更多代码来执行类似的任务。那么有什么优势呢
  • 我什么时候需要选择 mvc 而不是 mvvm & visversa

android mvvm android-databinding

-3
推荐指数
1
解决办法
3479
查看次数