Articles of android databinding

数据绑定按钮onclick无法正常工作

activity_layout.xml callback.onClick(v)}” android:text=”Menu” /> ActionCallBack.java 这是我在MainActivity中实现的接口 public interface ActionCallback { void onClick(View view); } MainActivity.java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_main); actionCallBack = new ActionCallBack() { @Override public void onClick(View view) { System.out.println(“Call onclick method *****”); } } } 当我点击按钮时onClick()方法没有被激发,注意显示在输出中或没有执行任何操作。 但是使用onClickListener以传统方式工作

使用Android DataBinding进行共享元素转换

我正在使用Conductor API和Android DataBinding,并且一直在尝试从控制器视图到另一个控制器视图进行简单的共享元素转换,但它无法正常工作。 点击demoS列表中的“Android数据绑定”演示将带您进入一个屏幕,点击显示的textView应该将其转换到下一个屏幕。 但是现在它已经消失了。 这是我的事情,这里是相同的票 。 更新:我认为在BindedBaseController类中有些不对劲 ? public abstract class BindedBaseController extends Controller { private ViewDataBinding mViewDataBinding; protected BindedBaseController() { } protected BindedBaseController(Bundle args) { super(args); } protected abstract View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container); @NonNull @Override protected View onCreateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup container) { View view = inflateView(inflater, container); mViewDataBinding […]

迁移到AndroidX后的数据绑定错误

迁移到AndroidX后,我遇到了很多关于数据绑定错误的错误(Refactor> Migrate to AndroidX)。 error: cannot find symbol @Nullable ViewGroup root, boolean attachToRoot, @Nullable DataBindingComponent component) { ^ symbol: class DataBindingComponent location: class ActivityInfoBinding 我正在使用Android Studio 3.2 Beta 2 我的依赖: dependencies { implementation fileTree(dir: ‘libs’, include: [‘*.jar’]) implementation “org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version” implementation ‘androidx.appcompat:appcompat:1.0.0-beta01’ implementation ‘androidx.cardview:cardview:1.0.0-beta01’ implementation ‘com.google.android.material:material:1.0.0-beta01’ implementation ‘androidx.constraintlayout:constraintlayout:2.0.0-alpha1’ implementation “com.squareup.retrofit2:retrofit:$versions.retrofit” implementation “com.squareup.retrofit2:converter-gson:$versions.retrofit” implementation ‘androidx.room:room-runtime:2.0.0-beta01’ kapt ‘androidx.room:room-compiler:2.0.0-beta01’ […]

ViewDataBinding getVariable?

两个主要问题是: 为什么ViewDataBinding没有像getVariable(“variableName”)这样的方法来查找variables并返回它,如果不存在具有此名称的variables,则返回null。 他们以任何方式/解决方法来实现这种行为吗? 所以更明确一点:如果我不知道我的ViewDataBinding的types,是他们获取variables的方法还是我必须知道它的types? 以下是它的实际工作方式: 我有一个名为my_layout.xml的布局: 我给它的ViewDataBinding实例充气: MyLayoutBinding binding = (MyLayoutBinding) DataBindingUtil.inflate(inflater, R.layout.my_layout, root, false); 我可以通过调用适当的方法获取它的variables: String myVariable = binding.getMyVariable(); 所以这就是当我们知道 ViewDataBinding 的types时如何获取variables。 我的问题在这里: 让我们假设我有3个名为my_layout_1 , my_layout_2 , my_layout_3布局,这3个布局被标签包围。 这3个布局也有相同的variables( myVariable )。 所以这里是布局: my_layout_1 my_layout_2 my_layout_3 因此,不同的布局表示具有不同风格的文本(我知道它可以通过其他方式实现,但目标只是解释为什么我需要此函数getVariable(variableName) 。 想象一下,我有一个名为my_text_container的布局,它将随机包含3个布局中的一个。 my_text_container 所以我会通过做这样的事情来添加文本(再次,它仅用于演示目的): MyTextContainerBinding textContainerBinding = (MyTextContainerBinding) DataBindingUtil.inflate(inflater, R.layout.my_text_container, root, false); int textLayoutRes; int randomNumber = generateNumberBetween0and2(); […]

在EditText中使用double值进行双向数据绑定

在Android中,我们可以在variables前使用@=双向数据绑定。 但是,这个variables是double 。 因此,要在EditText显示它,我需要使用String.valueOf(pojo.value)将其转换为String 。 如果我在前面附加=用于双向数据绑定,它只是不编译。 如果我附加一个onTextChanged并在那里设置值,我就会丢失光标。 有没有解决方法? 编辑: 它与InverseBindingAdapter一起使用但不允许. (期间)打字。

如何正确地将数字双向绑定到Android editText

我必须在这里遗漏一些东西。 我在Android的双向绑定中看到的每个例子都基于支持数据中的String ,用于任何用户可输入的内容,如EditText 。 处理任何不是字符串的东西似乎有点……不优雅。 例如,如果我的域模型中有一个需要可编辑的双精度,那么我提出的最佳绑定需要一个ViewModel ,令人惊讶的是在模型和EditText之间需要很多代码。 我错过了什么关键吗? 我真的需要30行代码来将EditText与double连接吗? 为了便于讨论,我们考虑在双向绑定的EditText表示为double的货币字段: 这里是我必须构造的ViewModel,以便为EditText提供一个绑定的字符串。 @Bindable private String startBucksString; private double localBucks; public String getStartBucksString() { double domainBucks = cd.getStartBucks(); // Ignore incoming change of less than rounding error if( Math.abs(localBucks – domainBucks) < .001 ) return startBucksString; startBucksString = ""; if( domainBucks != 0) startBucksString = String.format("$%.2f", domainBucks); […]

Android数据绑定无法正常工作

我试图用Android Data Binding做一个简单的测试示例。 我只想在我的片段中显示名为”title”的EditText的文本”test” “title” ,但是这个文本没有显示出来。 这是我的代码: TestVM.java public class TestVM extends BaseObservable { public TestVM() {} @Bindable public String getText() { return “test”; } } fr_login.xml FrLogin.java @EFragment public class FrLogin extends Fragment { … @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { FrLoginBinding binding = DataBindingUtil.inflate(inflater, R.layout.fr_login, container, false); return binding.getRoot(); […]

Android BindingAdapter执行顺序?

我需要了解数据绑定库如何确定其BindingAdapter的执行顺序。 如果我有一个View的两个BindingAdapter,如果View同时具有与这些BindingAdapter相对应的属性,它将如何确定首先执行哪个适配器? 我问,因为执行顺序在我的情况下很重要。 我有以下BindingAdapter / s: public class SpinnerBindingAdapter { @BindingAdapter(value = {“entries”}) public static void setEntries(Spinner spinner, List spinnerItems) { for (int i = 0; i < spinnerItems.size(); i++) { spinnerItems.get(i).setIndex(i); } ArrayAdapter adapter = new ArrayAdapter(spinner.getContext(), R.layout.spinner_item, spinnerItems); spinner.setAdapter(adapter); } @InverseBindingAdapter(attribute = “selectedItem”, event = “selectedItemAttrChanged”) public static Object getSelectedItem(Spinner spinner) { Object […]

app:visibleGone无法解析android Databinding

当我构建项目时。 我在app上遇到错误:visibleGone 我也在build.gradle中启用了dataBinding并使用了android架构组件和mvvm。 project targetSdkVersion是26 , support 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 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应用程序时,用于引用代码中资源的文件R.java将在以下位置生成: /app/build/generated/source/r/debug/com/example/R.java 我的理解是新的Android数据绑定库以类似的方式工作,在构建过程中基于布局文件名生成绑定类。 例如,这个布局名为view_drawer_page_header.xml : 应该生成一个名为ViewDrawerPageHeaderBinding的类。 该文档提到此类将位于com.example.databinding包中。 但是,如果我在构建后在项目中搜索具有此名称的文件,则无法获得任何结果。 该应用程序在设备上运行良好,所以我假设生成的文件是最终.apk的一部分。 有可能检查他们的内容吗? 同样的问题适用于例如生成的BR类,用于引用使用@Bindable注释注释的可更新的Observable属性。