标签: android-databinding

如何在RecyclerView中使用SortedList和Android数据绑定库?

Android数据绑定提供了几个Observable数据接口,包括ObservableList.但SortedList(在最新版本的RecyclerView库中引入)根本不扩展List.

我如何使用SortedList for RecyclerView与Android数据绑定库?

android android-recyclerview android-databinding

13
推荐指数
2
解决办法
3819
查看次数

Android Studio显示警告:此处不允许元素合并

我基于LinearLayout创建自定义视图.类扩展了LinearLayout类,我在布局中有:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <merge>
        some staff here
    </merge>
</layout>
Run Code Online (Sandbox Code Playgroud)

Android Studio会显示警告Element merge is not allowed here,但应用有效.

怎么了?

android android-layout android-databinding

13
推荐指数
2
解决办法
3280
查看次数

Android - 使用数据绑定的条件文本值

我想有条不紊地将TextView的文本设置为其中一个或另一个.

Android数据绑定文档建议您可以在文本是视图模型的属性时有条件地设置文本.例如

android:text="@{user.displayName != null ? user.displayName : user.lastName}"
Run Code Online (Sandbox Code Playgroud)

但有没有办法从strings.xml中设置文本而不是在我的视图模型中添加它?我想要这样的东西 -

android:text="@{viewModel.expanded ? @string/collapse : @string/expand}"
Run Code Online (Sandbox Code Playgroud)

XML看起来有点像这样:

<?xml version="1.0" encoding="UTF-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto">
   <data class="TravellerInfoBinding">
      <import type="android.view.View" />
      <variable name="viewModel" type="com.myproject.viewmodel.TravellerInfoViewModel" />

   </data>
   <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal">
      <ImageView android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_gravity="center_vertical"
        android:src="@drawable/expandable_arrow_blue" />

      <TextView style="@style/primary_pair_element_value" 
        android:layout_width="wrap_content"   
        android:layout_height="wrap_content" 
        android:text="@{viewModel.expanded ? @string/taxes_fees_detail : @string/hide_taxes_fees_detail}"
        android:textSize="12sp" />

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

这是我的视图模型 -

package com.myproject.viewmodel;

imports...

public class TravellerInfoViewModel extends BaseObservable {

  @Bindable
  private final TaxDetailsViewModel taxDetailsViewModel;

  @Bindable
  private boolean expanded;

  Constructor....

  public boolean isExpanded() …
Run Code Online (Sandbox Code Playgroud)

data-binding android android-databinding

13
推荐指数
2
解决办法
1万
查看次数

错误:数据绑定尚不支持Jack构建

我正在实施DataBinding,它工作得很完美,但它不允许我使用jackOptions.它Data Binding does not support Jack builds yet在构建时抛出错误.

这是我的 build.gradle

android {


   defaultConfig {
       ...

       dataBinding {
           enabled true
       }

       jackOptions {
           enabled true
       }
   }

   compileOptions {
       sourceCompatibility JavaVersion.VERSION_1_8
       targetCompatibility JavaVersion.VERSION_1_8
   }
}
Run Code Online (Sandbox Code Playgroud)

data-binding android android-jack-and-jill android-databinding

13
推荐指数
2
解决办法
4769
查看次数

Android数据绑定吞噬了其他编译​​器的错误

如果在编译期间有任何错误,则不会生成数据绑定类 - 因此,我得到了大量的错误,如下所示:

  symbol:   class DataBindingComponent
  location: class TrainingActivityCompletedSetBinding
  e: S:\ProjectLocation\TrainingActivityCompletedSetBinding.java:60: error: cannot find symbol
  @Nullable DataBindingComponent component)
Run Code Online (Sandbox Code Playgroud)

问题是编译错误根本不与数据绑定有关,因此我不知道实际上是什么导致它 - 我必须手动挖掘文件才能找到问题.

在上面的例子中,我只是@Inject从需要它的构造函数中省略.在这种情况下看到来自Dagger的错误消息是很可爱的,这样我就可以立即找到它,而不必深入挖掘所有项目类来手动找到它.

任何帮助将大大感激!


Android Studio和数据绑定目前都是3.1.3版本,至少从3.0开始就出现了错误.

使用Kotlin V1.2.41和kapt生成代码.

尝试增加编译器显示的最大错误数,遗憾的是没有区别.

暂时,解决方法是android.databinding.enableV2=truegradle.properties中简单地禁用数据绑定V2 : . 尽管如此,仍然需要更好的解决方案

android android-databinding

13
推荐指数
1
解决办法
2652
查看次数

Bindable 必须位于 Observable 类的成员上

我是数据绑定的新手,这是我的代码,但在构建时出现此错误

class DatabindingViewModel :ViewModel() {

val currentFruitName:LiveData<String>
    get() = FakeRepository.currentName

fun changeNameOnClick()=FakeRepository.changeRandomFoodName()

//two way LiveData
@Bindable
val editTextContext= MutableLiveData<String>()

private val _displayEditTexfContent=MutableLiveData<String>()
val displayEditTexfContent:LiveData<String>
    get()=_displayEditTexfContent

fun onDisplayEtText(){
    _displayEditTexfContent.value=editTextContext.value
}
Run Code Online (Sandbox Code Playgroud)

这是我的 xml 布局代码:

    <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="binding"
            type="ir.persiandesigners.myapplication.databinding.viewmodel.DatabindingViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="50dp"
            android:layout_marginLeft="50dp"
            android:layout_marginTop="32dp"
            android:layout_marginEnd="50dp"
            android:layout_marginRight="50dp"
            android:text="@{binding.currentFruitName}"
            android:textAppearance="@style/TextAppearance.AppCompat.Display1"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="32dp"
            android:onClick="@{()->binding.changeNameOnClick()}"
            android:text="Get Random  Name"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/textView" />

        <EditText
            android:id="@+id/editText" …
Run Code Online (Sandbox Code Playgroud)

android android-databinding android-viewmodel

13
推荐指数
2
解决办法
4788
查看次数

如何使用 Glide 数据绑定图像加载?

我正在尝试使用数据绑定加载图像。但我从来没有克服它。我的问题在哪里?下面是我的代码和布局结构。

MyItemViewModel.kt

  @BindingAdapter("imageUrl")
    fun loadImage(view: RoundedImageView, url: String) = Glide.with(view.context).load(url).into(view)
Run Code Online (Sandbox Code Playgroud)

布局文件

<data>

    <variable
            name="viewModel"
            type="com.myapp.app.ui.activity.albumlist.AlbumItemViewModel"/>
</data>

  <com.makeramen.roundedimageview.RoundedImageView
                android:layout_width="60dp"
                android:id="@+id/ivRoundedAlbum"
                android:layout_marginStart="@dimen/unit_20_dp"
                app:riv_corner_radius="8dp"
                app:imageUrl="@{viewModel.data.cover}"
                android:layout_height="60dp"/>
Run Code Online (Sandbox Code Playgroud)

android kotlin android-databinding

13
推荐指数
2
解决办法
1万
查看次数

Android什么是setVariable(BR.xyz,model)和databinding.setXYZ(model)之间的区别

我正在研究android数据绑定,并遇到了我们可以使用以下两种方式设置模型的场景:

 User user = new User("User", "Abc"); // this is a model
dataBinding.setVariable(BR.user, user);
dataBinding.executePendingBindings(); // and we have to do this... Why?
Run Code Online (Sandbox Code Playgroud)

我们也可以这样设置:

binding.setUser(user);
Run Code Online (Sandbox Code Playgroud)

谁能解释一下这两者之间有什么区别?

用户模型:

public class User{
public String fName;
public String lName;

public User(String fName, String lName){
this.fName = fName;
this.lName = lName;
   }
}
Run Code Online (Sandbox Code Playgroud)

android android-layout android-databinding

12
推荐指数
2
解决办法
4904
查看次数

如何使用Android数据绑定库制作粗体文本

非常基本,我想根据是否读取文本,使消息标题变为粗体.我似乎找不到解决方案.

这是我的XML代码:

            <TextView
                android:text="@{message.title}"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentTop="true"
                android:layout_marginBottom="5dp"
                android:layout_marginTop="5dp"
                android:layout_toLeftOf="@+id/timestamp"
                android:textSize="18sp"
                android:textStyle='@{message.isRead() ? "bold" : "normal"}'
                android:textColor='@{message.isRead() ? 0xff313131 : 0xff0662ab}' />
Run Code Online (Sandbox Code Playgroud)

颜色变化很好,只有粗体文字给我一些问题.

错误:任务':app:compileDebugJavaWithJavac'的执行失败.

java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****msg:在android.widget.TextView上找不到参数类型为java.lang.String的属性'android:textStyle'的setter.file:D:...... xml loc:39:41 - 39:79****\data binding error****

android android-databinding

12
推荐指数
3
解决办法
6699
查看次数

android数据绑定:如何避免以编程方式触发的onCheckedChanged

我现在正试图在我的项目中使用android数据绑定,遇到这种问题,例如:我有3个复选框作为复选框组,如果选中第一个复选框,则变量type为1.第二个使得type为2 ,第三个使得type3.所以我以这种方式实现代码.

   // layout.xml


   <android.support.v7.widget.AppCompatCheckBox
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:checked="@{userInfoViewModel.type == 1}"
        android:onCheckedChanged="@{(compoundButton, checked) -> userInfoViewModel.onTypeChecked(checked, 1)}"
        />

   <android.support.v7.widget.AppCompatCheckBox
        android:layout_width="50dp"
        android:layout_height="55dp"
        android:checked="@{userInfoViewModel.type == 2}"
        android:onCheckedChanged="@{(compoundButton, checked) -> userInfoViewModel.onTypeChecked(checked, 2)}"
        />

    <android.support.v7.widget.AppCompatCheckBox
        android:layout_width="50dp"
        android:layout_height="55dp"
        android:checked="@{userInfoViewModel.type == 3}"
        android:onCheckedChanged="@{(compoundButton, checked) -> userInfoViewModel.onTypeChecked(checked, 3)}"
        />
Run Code Online (Sandbox Code Playgroud)
// viewModel

public void onTypeChecked(boolean checked, int i) {
    if (checked) {
        // if it is a check. set the type
        type.set(i);
    } else {
        // if it is a uncheck. set type to …
Run Code Online (Sandbox Code Playgroud)

data-binding checkbox android android-databinding

12
推荐指数
4
解决办法
7137
查看次数