【问题标题】:app:visibleGone cannot resolve on android Databindingapp:visibleGone 无法在 android 数据绑定上解析
【发布时间】:2018-05-24 14:18:32
【问题描述】:

当我构建项目时。我在应用程序上遇到错误:visibleGone

我还在 build.gradle 中启用了真正的 dataBinding,并使用了 android 架构组件和 mvvm。 项目targetSdkVersion26support lib version is 26.0.1

下面是错误信息

error: package com.****.****.databinding does not exist
error: cannot find symbol class ActivityMainBinding
Cannot find the setter for attribute 'app:visibleGone' with parameter type boolean on android.widget.Button.

这是我的 activity_main.xml

<layout xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="loading"
            type="boolean" />

    </data>

    <LinearLayout 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"
        android:orientation="vertical"
        tools:context="com.example.aungmyolwin.importdb.MainActivity">

        <Button
            android:id="@+id/btn_load_sql"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Load from SQL"
            app:visibleGone="@{!loading}"/>

        <Button
            android:id="@+id/btn_load_room"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Load from Room mapper"
            app:visibleGone="@{!loading}"/>

        <TextView
            android:id="@+id/tv_import_loading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Importing database...."
            app:visibleGone="@{loading}"/>


    </LinearLayout>
</layout>

ActivityMain.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        binding.btnLoadRoom.setOnClickListener(this);
        binding.btnLoadSql.setOnClickListener(this);

        viewModels= ViewModelProviders.of(this).get(MainActivityViewModels.class);

    }
}

【问题讨论】:

    标签: android mvvm android-databinding


    【解决方案1】:

    您需要为app:visibleGone 创建一个自定义BindingAdapter(因为它不是可用的方法)。
    喜欢

    public class BindingAdapters {
        @BindingAdapter("visibleGone")
        public static void showHide(View view, boolean show) {
            view.setVisibility(show ? View.VISIBLE : View.GONE);
        }
    }
    

    另外,如果你不想定义这样的方法,你可以这样做

    <layout xmlns:app="http://schemas.android.com/apk/res-auto">
        <data>
            <variable
                name="loading"
                type="boolean" />
            <import type="android.view.View"/> <!-- remember to import -->
        </data>
    
        <LinearLayout >
            <Button
                android:visibility="@{loading ? View.GONE : View.VISIBLE}"
        </LinearLayout>
    </layout>
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-11-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2013-03-23
      相关资源
      最近更新 更多