标签: android-databinding

数据绑定 - 如何编写多行声明?

有没有办法用DataBinding库编写多行代码?

我试过跟随,但它抱怨XML格式

android:text="@{
            viewModel.subscriptionExpiration == null
                ? viewModel.field1
                : viewModel.field2
        }"
Run Code Online (Sandbox Code Playgroud)

出现以下错误: Error:(80) Error parsing XML: not well-formed (invalid token)

单行替代工作,但我觉得它不太可读:

android:text="@{viewModel.subscriptionExpiration == null ? viewModel.field1 : viewModel.field2}"
Run Code Online (Sandbox Code Playgroud)

android android-databinding

18
推荐指数
1
解决办法
825
查看次数

Android数据绑定不适用于<merge>属性

我正在尝试使用自定义视图的数据绑定(George Mount 在此处显示的可能用法).

无法想象在没有<merge>标签的情况下构建复合视图.但是,在这种情况下,数据绑定失败:

MyCompoundView 类:

public class MyCompoundView extends RelativeLayout {

MyCompoundViewBinding binding;

public MyCompoundView (Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

private void init(Context context){
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    binding = MyCompoundViewBinding.inflate(inflater, this, true);
}
Run Code Online (Sandbox Code Playgroud)

my_compound_view.xml:app:isGone="@{!data.isViewVisible}"我希望控制整个复合视图的可见性

<?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"
    >

    <data>
        <variable name="data" type="com.example.MyViewModel"/>
    </data>

    <merge
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:isGone="@{!data.isViewVisible}">

        <ImageView
            android:id="@+id/image_image"
            android:layout_width="60dp"
            android:layout_height="60dp"
            app:imageUrl="@{data.imagePhotoUrl}"/>

         <!-- tons of other views-->

    </merge>

</layout>
Run Code Online (Sandbox Code Playgroud)

编译器错误:

Error:(13) No resource identifier …
Run Code Online (Sandbox Code Playgroud)

data-binding android android-databinding

18
推荐指数
1
解决办法
7732
查看次数

使用Android上的数据绑定设置文本颜色

我正在尝试TextView使用数据绑定库设置文本颜色

android:textColor="@{holder.getTitleColor(context, item)}"
Run Code Online (Sandbox Code Playgroud)

Holder类中的方法定义如下

public int getTitleColor(Context context, Item item) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

无论我返回颜色int(@ColorInt)还是颜色资源(@ColorRes),它都会将文本绘制为纯白色.我究竟做错了什么?

android android-databinding

18
推荐指数
4
解决办法
2万
查看次数

我应该如何在Android中的viewModel中获取资源(R.string)(MVVM和数据绑定)

我目前正在使用databindingMVVM architectureAndroid.在ViewModel中获取字符串资源的最佳方法是什么.

我没有使用新AndroidViewModel组件,eventbusRxJava

我正在经历接触的方式,其中Activity将负责提供资源.但最近我在这个答案中找到了一个类似的问题,其中使用应用程序上下文的单个类提供了所有资源.

哪种方法更好?或者还有其他我可以尝试的东西吗?

android mvvm android-databinding

18
推荐指数
6
解决办法
1万
查看次数

如何在Android布局中按值而不是名称设置枚举属性?

我有一个自定义视图持有另一个.层次:

MyOuterView
->MyInnerView
Run Code Online (Sandbox Code Playgroud)

MyInnerView 有一个枚举属性,如:

<attr name="myAttr" format="enum">
    <enum name="foo" value="0"/>
    <enum name="bar" value="1"/>
</attr>
Run Code Online (Sandbox Code Playgroud)

所以我可以在MyOuterViewXML中实例化组件,如:

<com.example.MyInnerView
....
app:myAttr="foo"/>
Run Code Online (Sandbox Code Playgroud)

当然哪个有效.这MyOuterView为定制本身提供了一个论据.根据这个论点,我想设置一个参数MyInnerView.

希望的行为是我可以使用数据绑定,如:

<com.example.MyInnerView
....
app:myAttr="@{data.getMyAttr()}"/>
Run Code Online (Sandbox Code Playgroud)

其中getMyAttr()的样子:

public int getMyAttr() {
    return myAttr; // returns 0 or 1
}
Run Code Online (Sandbox Code Playgroud)

结果是编译问题.

****/数据绑定错误****消息:在com.example.MyInnerView上找不到参数类型为int的属性'app:myAttr'的setter

所以显然我不能通过值设置枚举,而只能通过名称设置枚举.除了以MyInnerView编程方式创建之外的任何想法 请注意,我无法改变MyInnerView.

java enums android android-layout android-databinding

18
推荐指数
1
解决办法
1076
查看次数

Android DataBinding 正在泄漏内存

我正在使用数据绑定,我已经lateinit var为绑定声明了一个,当我要去不同的片段时,Leaky canary 显示了一个泄漏。

分段

class HomeFragment : BottomNavViewHostBaseFragment() {

    private lateinit var viewModel: HomeViewModel
    private lateinit var binding: FragmentHomeBinding

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        viewModel = ViewModelProviders.of(this).get(HomeViewModel::class.java)
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)
        binding.lifecycleOwner = viewLifecycleOwner
        binding.viewModel = viewModel
        return binding.root
    }

   ...
}
Run Code Online (Sandbox Code Playgroud)

这是来自 Leaky Carny 的信息

androidx.constraintlayout.widget.ConstraintLayout has leaked:
Toast$TN.mNextView
? LinearLayout.mContext
? MainActivity.navigationView
? NavigationView.listener
? BaseFragment$setNavigationDrawerItemSelectedListener$1.this$0 (anonymous implementation of com.google.android.material.navigation.NavigationView$OnNavigationItemSelectedListener) ? OrdersHostFragment.mFragmentManager
? FragmentManagerImpl.mActive
? HashMap.table
? array …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-databinding

18
推荐指数
2
解决办法
6320
查看次数

Android - 带有Preference活动的DataBinding

我在xml中设置数据绑定但是当我转到首选项活动以实际设置绑定时我不能.数据绑定xml所在的文件名为preference.xml,因此我假设应该有一个名为PreferencesBinding的生成类,而不是.它应该不是自动生成的吗?另外我在preferenceActivity.java中的代码不会编译以下内容:

    Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         PreferencesBinding binding = DataBindingUtil..... //what do put here ??? this is preferenceactivity not Activity

         Admin user = new Admin(true);
         binding.setUser(user);//this what i want to do

         addPreferencesFromResource(R.xml.preferences);//this would not be necessary if i can get dataBinding to work
//..rest of code not important
       }
Run Code Online (Sandbox Code Playgroud)

我开始认为数据绑定不适用于偏好屏幕,任何人都可以帮忙吗?

如果neseccary看起来像这样的preferences.xml文件:

 <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customNS="http://schemas.android.com/apk/res/mypackage"
    >
    <data>
        <variable name="admin" type="mypackage.Administration"/>
    </data>

<PreferenceScreen>

<!-- ....bunch of preferences ... -->
</PreferenceScreen>
</layout
Run Code Online (Sandbox Code Playgroud)

xml android preferenceactivity android-databinding

17
推荐指数
2
解决办法
1700
查看次数

我可以将错误消息绑定到TextInputLayout吗?

我想直接将错误消息绑定到android.support.design.widget.TextInputLayout.我找不到通过布局设置错误的方法.这甚至可能吗?

这就是我想象的工作方式:

<?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">
    <data>
        <import type="android.view.View" />
        <variable
            name="error"
            type="String" />
    </data>
    <android.support.v7.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:errorEnabled="true"
            app:errorText="@{error}">
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/username"
                android:inputType="textEmailAddress" />
        </android.support.design.widget.TextInputLayout>
    </android.support.v7.widget.LinearLayoutCompat>
</layout>
Run Code Online (Sandbox Code Playgroud)

android android-layout android-databinding

17
推荐指数
1
解决办法
9705
查看次数

使用新的kotlin 1.1构建错误,kapt cant parse databinding params

我将我的项目从android studio 2.2更新到android studio 2.3,并将项目从kotlin 1.06增加到kotlin 1.1

这是我得到的错误

    :app:javaPreCompileDebug
:app:transformClassesAndDataBindingWithDataBindingMergeArtifactsForDebug UP-TO-DATE
:app:compileDebugKotlin
w: The '-d' option with a directory destination is ignored because '-module' is specified
:app:compileDebugJavaWithJavac
Processor path was modified by kapt. Previous value = /home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre7/1.1.0/ef03cfed144ff47eed2cab1f7be4381bc18a6237/kotlin-stdlib-jre7-1.1.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/commons-io/commons-io/2.4/commons-io-2.4.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/android/databinding/compilerCommon/2.3.0/compilerCommon-2.3.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/commons-codec/commons-codec/1.10/commons-codec-1.10.jar:/home/harisvsulaiman/Sdk/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.1/constraint-layout-solver-1.0.1.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/google/guava/guava/17.0/guava-17.0.jar:/home/harisvsulaiman/Sdk/extras/android/m2repository/com/android/support/support-annotations/25.2.0/support-annotations-25.2.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.0/96a07041a11a09cf578892932d7511e1e11e3b6c/kotlin-stdlib-1.1.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/android/databinding/baseLibrary/2.3.0/baseLibrary-2.3.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.airbnb.android/epoxy-annotations/1.7.5/509abda14719aa31f55123c9a757bdadc8f45818/epoxy-annotations-1.7.5.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/io.realm/realm-annotations-processor/3.0.0/61c2ac9e7a068736558e69d585cfa777b35058b2/realm-annotations-processor-3.0.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/android/tools/annotations/24.5.0/annotations-24.5.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/glide/3.7.0/9e9eeaf9948ee4d6c3ab354e8dc14368f16994a4/glide-3.7.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.2.6/de0c509ae6c9db5b5b6004a9d102c92708346f7c/rxjava-1.2.6.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.11.0/840897fcd7223a8143f1d9b6f69714e7be34fd50/okio-1.11.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/adapter-rxjava/2.2.0/d80514b6f44f0c4c6234e2d67fea783a25e77275/adapter-rxjava-2.2.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/android/databinding/compiler/2.3.0/compiler-2.3.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/io.realm/realm-annotations/3.0.0/32a01bbb8cb421b6d53d7a102412142b0391c8c7/realm-annotations-3.0.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/org/antlr/antlr4/4.5.3/antlr4-4.5.3.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/retrofit/2.2.0/41e67dba73c3347e4503761642c39d0e06ca1f2/retrofit-2.2.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/squareup/javawriter/2.5.0/javawriter-2.5.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.6.0/69edde9fc4b01c9fd51d25b83428837478c27254/okhttp-3.6.0.jar:/home/harisvsulaiman/.android/build-cache/478fd1ace0e77af57c87f42a281aed180d5ce276/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/d7d6ec093cb49766f796118979b331d6f5c2b4c4/output/jars/classes.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/io.realm/realm-annotations/3.0.0/32a01bbb8cb421b6d53d7a102412142b0391c8c7/realm-annotations-3.0.0.jar:/home/harisvsulaiman/.android/build-cache/17205aea1b3195cf38fb66c2e060ee4beed141f8/output/jars/classes.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/adapter-rxjava/2.2.0/d80514b6f44f0c4c6234e2d67fea783a25e77275/adapter-rxjava-2.2.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.retrofit2/retrofit/2.2.0/41e67dba73c3347e4503761642c39d0e06ca1f2/retrofit-2.2.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.6.0/69edde9fc4b01c9fd51d25b83428837478c27254/okhttp-3.6.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.11.0/840897fcd7223a8143f1d9b6f69714e7be34fd50/okio-1.11.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/io.reactivex/rxjava/1.2.6/de0c509ae6c9db5b5b6004a9d102c92708346f7c/rxjava-1.2.6.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/glide/3.7.0/9e9eeaf9948ee4d6c3ab354e8dc14368f16994a4/glide-3.7.0.jar:/home/harisvsulaiman/.android/build-cache/6249fbc26c3c324164d6bccd213e772dbffabab8/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/00346f3603afd369923753ca5b3574b3cbd68913/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/44456db0af44370448077b85155ec1b111460aaf/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/ab1b9ebddb2122246c96bfd338f92a2af4329445/output/jars/classes.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/com.airbnb.android/epoxy-annotations/1.7.5/509abda14719aa31f55123c9a757bdadc8f45818/epoxy-annotations-1.7.5.jar:/home/harisvsulaiman/.android/build-cache/fb128d6e98efde38d1b59985fb85f2eee1b186eb/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/c9550d2fd003ae92d1406c8c46f2b35cffe031ce/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/08e46ece36546bbc2b85ffa90c6a8a4cf3bbab10/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/b293042c81288354130e748246586e2669e423d1/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/6a84f4dc5c9dda9b0a661c34b982f15791783194/output/jars/classes.jar:/home/harisvsulaiman/Sdk/extras/m2repository/com/android/support/constraint/constraint-layout-solver/1.0.1/constraint-layout-solver-1.0.1.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jre7/1.1.0/ef03cfed144ff47eed2cab1f7be4381bc18a6237/kotlin-stdlib-jre7-1.1.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.1.0/96a07041a11a09cf578892932d7511e1e11e3b6c/kotlin-stdlib-1.1.0.jar:/home/harisvsulaiman/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar:/home/harisvsulaiman/.android/build-cache/79467da2ee5fd2328774a23645475ecb9d0946fd/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/02c10559b235748437a45d6ca44f6c5e5230c4e9/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/82bf4ec6a1051c7130958118c35d8fb99643c133/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/8dd8873d08fda228f6ea3117e6073fd14e35a5d4/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/8fc507ef1c90eab75de9d0123ad4b7535753f320/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/5fb2bef0cb0bba8cf7f981cadcf1cf142a325276/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/0727c2e3f4507058ea7ae52687ced332bf06362f/output/jars/classes.jar:/home/harisvsulaiman/.android/build-cache/31d4c76434ce8a5ba46bf630f178e855f7516250/output/jars/classes.jar:/home/harisvsulaiman/Sdk/extras/android/m2repository/com/android/support/support-annotations/25.2.0/support-annotations-25.2.0.jar:/home/harisvsulaiman/android-studio/gradle/m2repository/com/android/databinding/baseLibrary/2.3.0/baseLibrary-2.3.0.jar
Destination for generated sources was modified by kapt. Previous value = /home/harisvsulaiman/AndroidStudioProjects/Hafiz/app/build/generated/source/apt/debug
:app:compileDebugKotlinAfterJava
w: The '-d' option with a directory destination is ignored because '-module' is specified
:app:copyDebugKotlinClasses UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:compileDebugSources
:app:incrementalDebugUnitTestJavaCompilationSafeguard UP-TO-DATE
:app:javaPreCompileDebugUnitTest
:app:compileDebugUnitTestKotlin UP-TO-DATE
:app:compileDebugUnitTestJavaWithJavac UP-TO-DATE
:app:compileDebugUnitTestKotlinAfterJava UP-TO-DATE
:app:copyDebugUnitTestKotlinClasses UP-TO-DATE …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-studio android-databinding kotlin-interop

17
推荐指数
1
解决办法
4417
查看次数

gradle属性是"实验性的和不受支持的"是什么意思?

有几次,为了解决问题或更新依赖项,我必须启用给定的gradle选项设置.

  • 例如,Robolectric 4.0迁移指南指出:

    把它放在你的gradle.properties中:

    android.enableUnitTestBinaryResources=true

  • 同样,为了调试数据绑定编译错误,我遵循Gradle的构建日志中打印的建议:

    Gradle可能会禁用渐进式编译[...].
    考虑android.enableSeparateAnnotationProcessing=true在gradle.properties文件中设置实验性功能标志,以在单独的任务中运行注释处理并进行增量编译.


从这两个例子中,我得知作者(Robolectric/gradle维护者)确信启用此选项将对每种情况产生积极影响.
但是,在这两种情况下,我都会在构建输出中收到此警告:

警告:选项设置'android.enableUnitTestBinaryResources = true'是实验性的,不受支持.当前默认值为"false".

警告:选项设置'android.enableSeparateAnnotationProcessing = true'是实验性的,不受支持.当前默认值为"false".

gradle.properties几个月以来我的旗帜已经存在了android.databinding.enableV2=true.为了看看它是如何处理的,我试着把它放到false,它带来了相同的The option setting 'android.databinding.enableV2=false' is experimental and unsupported.警告(这似乎表明unsupported设置被忽略).

  • 我知道这些是实验性功能标志.但是不支持呢?这是否意味着如果出现任何问题我不应该期待支持,或者这是否意味着他们会被忽略

  • 如果这意味着它们被忽略了,那么这些属性是如何被使用的呢?

android gradle android-databinding gradle-properties

17
推荐指数
1
解决办法
5659
查看次数