标签: android-databinding

Android数据绑定与自定义适配器

我正在尝试将Android的数据绑定功能与自定义适配器和ListView一起使用.我无法覆盖自定义适配器的getView方法:

public class ChecksAdapter extends ArrayAdapter<Check> {

    public ChecksAdapter(Context context, ObservableList<Check> checks) {
        super(context, R.layout.check, checks);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        CheckBinding binding = DataBindingUtil.inflate(
                LayoutInflater.from(getContext()),
                R.layout.check, parent, false);
        binding.setCheck(this.getItem(position));

        // Return what?
    }

}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 我在哪里可以得到View我应该返回的元素?或者换句话说,如何将对象绑定到膨胀/转换视图?
  • convertView使用数据绑定时如何重用?
  • 这是实现这个的正确方法吗?ListViews上的指南不是很清楚

以下是本指南中ListViews的唯一参考:

如果您在ListView或RecyclerView适配器中使用数据绑定项,您可能更喜欢使用:

   ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
   //or
   ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
Run Code Online (Sandbox Code Playgroud)

android android-databinding

15
推荐指数
3
解决办法
8334
查看次数

如何将架构组件与Android上的数据绑定相结合?

我开发了基于android数据绑定库的应用程序:https://developer.android.com/topic/libraries/data-binding/index.html

class SignInViewModel extends BaseObservable {

    @Bindable
    public String getLogin() {
        return login;
    }

    @Bindable
    public String getPassword() {
        return password;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我想使用新库中的ViewModelProviders:https: //developer.android.com/topic/libraries/architecture/guide.html

SignInViewModel signInViewModel = ViewModelProviders.of(this).get(SignInViewModel.class);
Run Code Online (Sandbox Code Playgroud)

它如何结合?任何的想法?或者应该结合这两个库?

编辑

我改为:

class SignInViewModel extends ViewModel {
   public ObservableField<String> login = new ObservableField<>("");

    public ObservableField<String> password = new ObservableField<>("");
}
Run Code Online (Sandbox Code Playgroud)

现在编译,但问题是:它是正确的方式?

data-binding android android-databinding

15
推荐指数
2
解决办法
5364
查看次数

Android:数据绑定,notifyPropertyChanged()无法正常工作?

我正在使用Android的数据绑定库.我扩展了数据对象BaseObservable.

 public static class SimpleData extends BaseObservable implements Serializable {
    private String text, subText;
    private SpannableString totalText;
 @Bindable
    public SpannableString getTotalText() {
      return totalText;
    }

    public void setTotalText(SpannableString totalText) {
      this.totalText = totalText;
      notifyPropertyChanged(BR.totalText);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的xml也是绑定的

<TextView
              android:id="@+id/patient_name"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:textAppearance="?android:attr/textAppearanceMedium"
              android:layout_marginLeft="16dp"
              android:layout_toRightOf="@+id/patient_image"
              android:textColor="@color/primary_text"
              android:text="@{object.getTotalText()}"
              />
Run Code Online (Sandbox Code Playgroud)

绑定发生在初始值上.但是当我使用更改值时

object.setTotalText(someSpannableString);
Run Code Online (Sandbox Code Playgroud)

更改不会反映在文本视图中.可能是什么问题呢?

android android-databinding

14
推荐指数
1
解决办法
7072
查看次数

找不到带参数的属性的setter

我的工作DataBindingBindingAdapter.这是我的自定义方法.

@BindingAdapter("{bind:fadevisible}")
public static void setFadeVisible(LinearLayout view, int visible) {
    Log.e("Bindings", "setFadeVisible: ");
}
Run Code Online (Sandbox Code Playgroud)

在xml文件中,我称之为

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:fadevisible="@{1}"/>
Run Code Online (Sandbox Code Playgroud)

但它显示错误

错误:任务':app:compileDebugJavaWithJavac'的执行失败.java.lang.RuntimeException:发现数据绑定错误.****/数据绑定错误****消息:在android.widget.LinearLayout上找不到参数类型为int的属性'app:fadevisible'的setter.file:\ app\src\main\res-main\layout\activity_detail.xml loc:236:31 - 236:54****\data binding error****

我已经检查了这个这个帖子,但不知怎的,它没有帮助我,因为你可以看到我int从xml 传递,并且BindingAdapter我也提到LinearLayoutint有价值.

即使我有另一种方法,只是参数不同,工作正常

@BindingAdapter({"bind:image_round"}) 
public static void loadRoundImage(ImageView imageView, String url)
Run Code Online (Sandbox Code Playgroud)

data-binding android android-databinding

14
推荐指数
3
解决办法
3万
查看次数

在MVVM体系结构中使用Tab布局和数据绑定库

我正在开发一个具有标签布局作为图像的应用程序.

在此输入图像描述

我想将MVVM架构与数据绑定库一起使用,但我是这个框架的新手.

我可以通过使用ViewPager作为此示例的常规设置选项卡布局而不使用MVVM来执行此操作.

没有MVVM和数据绑定的常规选项卡布局:

activity_main.xml中:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabMode="fixed"
        app:tabGravity="fill"/>
</android.support.design.widget.AppBarLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"  />
Run Code Online (Sandbox Code Playgroud)

MainActivity.java:

public class MainActivity extends AppCompatActivity {

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
}

private void setupViewPager(ViewPager viewPager) …
Run Code Online (Sandbox Code Playgroud)

data-binding android mvvm android-tablayout android-databinding

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

Kotlin 1.2.50要求baseFeatureInfoDir

当我用一个Android项目切换时

classpath 'com.android.tools.build:gradle:3.2.0-alpha18'

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.50"

我遇到了

什么地方出了错:

在任务':detector:kaptDebugKotlin'的配置中发现了一些问题.

目录'〜/ project/build/intermediates/feature_data_binding_base_feature_info/debug/dataBindingExportFeaturePackageIdsDebug/out'为属性'annotationProcessorOptionProviders指定$ kotlin_gradle_plugin.$ 0. $ 0.baseFeatureInfoDir'不存在.为属性'databinding.baseFeatureInfoDir'指定的目录'〜/ project/build/intermediates/feature_data_binding_base_feature_info/debug/dataBindingExportFeaturePackageIdsDebug/out'不存在.

classpath 'com.android.tools.build:gradle:3.1.3'它正常工作

data-binding android kotlin android-databinding

14
推荐指数
1
解决办法
1220
查看次数

未解决的参考:BR(Android Studio)

我的顶级build.gradle:

buildscript {
    ext.kotlin_version = '1.2.41'
    ext.lifecycle_version = "1.1.1"
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
Run Code Online (Sandbox Code Playgroud)

我的项目级build.gradle:

android {
    ...
    dataBinding {
        enabled = true
    }
}

dependencies {
    ...
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}
Run Code Online (Sandbox Code Playgroud)

我还android.databinding.enableV2=true为每个Google文档添加了gradle.properties(https://developer.android.com/topic/libraries/data-binding/start)

当我尝试运行时,它Unresolved reference: BR在我的BaseViewHolder班级中显示错误.似乎BR已经正确生成了类,但是.../R.java当我将鼠标移到类名上时,它还会在文件中找到重复的类.我做错了什么?

fun bind(obj: Any) {
        binding.setVariable(BR.obj, obj)
        binding.executePendingBindings()
}
Run Code Online (Sandbox Code Playgroud)

kotlin android-studio android-databinding

14
推荐指数
3
解决办法
6144
查看次数

如何在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数据绑定吞噬了其他编译​​器的错误

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

  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
查看次数