我有以下带有数据绑定的 XML:
<EditText
android:id="@+id/addvalue"
android:inputType="numberDecimal"
android:digits="0123456789,€"
android:text="0,00 €"/>
<Button
android:id="@+id/add"
android:onClick="@{() -> fragment.addManualPosition(addvalue.text)}"/>
Run Code Online (Sandbox Code Playgroud)
我收到错误
"data binding error ****msg:if getId is called on an expression, it should have an id: addvalue.text"
Run Code Online (Sandbox Code Playgroud)
我根本找不到任何可以帮助我理解此错误的含义或如何修复它的内容。
我在添加要查看的结束约束时遇到问题
<android.support.constraint.ConstraintLayout
android:id="@+id/chatDocumentMessageContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@{chatMessage.corespondent==Corespondent.Sent? @drawable/very_rounded_corners_gray_background:@drawable/very_rounded_corners_orange_background}"
android:maxWidth="300dp"
android:minWidth="140dp"
android:onClick="@{clickListener::onClick}"
android:padding="@dimen/padding_large"
app:layout_constraintEnd_toEndOf="@{chatMessage.corespondent==Corespondent.Sent? ConstraintSet.PARENT_ID:ConstraintSet.UNSET}">
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
[kapt] 发生异常:android.databinding.tool.util.LoggedErrorException:发现数据绑定错误。****/ 数据绑定错误 ****msg:在 android.support.constraint.ConstraintLayout 上找不到参数类型为 int 的属性“app:layout_constraintEnd_toEndOf”的设置器。
尝试添加以下适配器,但仍然无法正常工作:
@BindingAdapter(" app:layout_constraintEnd_toEndOf")
fun setEndConstraint(guideline: Guideline, resource: Int) {
val params = guideline.getLayoutParams() as ConstraintLayout.LayoutParams
params.endToEnd = resource
guideline.layoutParams = params
}
Run Code Online (Sandbox Code Playgroud) 当表单中的所有字段都完成时,我想启用 AppCompatButton。
我正在使用 ViewModel 并希望使用数据绑定来启用它。
当视图上的文本更改以更新视图模型中的对象数据时,我有两种方法会触发。
我遇到的问题是当两个字段都完成时,我需要在布局上启用一个按钮以允许它们继续。
一个例子是登录,当用户名和密码字段填满时,登录按钮变为启用。
我有一个简单的应用程序——Button它从 rest api 中获取数据以及TextView显示此数据的位置。我正在使用MVVM架构模式。当ViewModel收到带有获取数据的回调时,我将其设置为 ObservableField。不幸的是它不会更新屏幕上的文本,但是每当我旋转设备数据时都会在屏幕上更新。
好了,废话不多说,我给你看代码:
视图模型
public class MyViewModel extends ViewModel{
private ObservableField<String> name = new ObservableField<>();
@Override
public void onListReceived(String username) {
super.onListReceived(list);
name.set(username);
}
public String getName() {
return name.get();
}}
Run Code Online (Sandbox Code Playgroud)
并在 XML 中:
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.name}"
tools:text="some text"/>
Run Code Online (Sandbox Code Playgroud)
据我所知,我认为android:text="@{viewModel.name}"在 ' @' 和 ' {'之间的这一行中它应该是 '=' ,但是当我添加它时,清理项目并重建它,我得到了一个无法解决的错误DataBindingComponent。
有任何想法吗?
提前致谢!
在android中实现了dataBinding,但在编译时抛出错误
XML 代码
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="@dimen/sw360dp_260dp"
android:layout_marginTop="@dimen/sw360dp_45dp"
android:background="@drawable/apply_jobs_background_xhdpi" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/toolbar"
android:layout_marginStart="@dimen/sw360dp_40dp"
android:layout_marginTop="@dimen/sw360dp_20dp"
android:orientation="vertical">
<TextView
android:id="@+id/applyJobsCompanyName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/amarnath_regular"
android:hint="Company Name"
android:textColor="@color/white"
android:textSize="@dimen/sw360dp_18sp"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我的错误
数据绑定错误****msg:“视图”节点文件没有类属性:C:\Users\Aayush\AndroidStuidoProjects\SkillDostiJobs\app\src\main\res\layout\activity_apply_jobs.xml
我在文档中找不到@{}vs之间的区别
。@={}
有什么不同?
有没有办法将数据变量传递给包含的布局?
父布局
<?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"
tools:showIn="@layout/fragment_settings">
<data>
<variable
name="viewModel"
type="......settings.SettingsFragmentViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:animateLayoutChanges="true"
android:overScrollMode="never"
android:padding="@dimen/spacing_default">
<include
android:id="@+id/main"
layout="@layout/layout_settings_main" />
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
并希望在包含的布局中包含 viewModel
<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"
tools:showIn="@layout/fragment_settings">
<data>
<variable
name="viewModel"
type="......settings.SettingsFragmentViewModel" />
</data>
<merge>
...........
Run Code Online (Sandbox Code Playgroud)
还是只有在这样设置时才可能:
binding = FragmentSettingsBinding.inflate(inflater, container, false).apply {
lifecycleOwner = this@SettingsFragment
viewModel = this@SettingsFragment.viewModel
main.viewModel = this@SettingsFragment.viewModel
}
Run Code Online (Sandbox Code Playgroud) 在我的数据绑定布局中,我通过以下方式设置了长按侦听器:
android:onLongClick="@{ ..binding expression.. }"
Run Code Online (Sandbox Code Playgroud)
代码按预期运行,但该android:onLongClick属性在 xml 文件中被标记为“未知”。此外,它没有自动完成功能。
此属性的绑定适配器包含在 中的数据绑定库中ViewBindingAdapter.java。
我正在尝试将一个已有 3 年历史的项目迁移到 AndroidX。该项目有3个模块。
app是主要模块。该项目在运行时构建sdk和apis模块的AAR 文件。并且该应用程序使用sdk和apis
我为迁移所做的更改是:
当应用程序启动时,它会从应用程序模块启动一个工作正常的活动。紧接着它从sdk模块启动一个活动。但是这里应用程序在 DataBindingUtil.setContentView 处崩溃。所有 3 个模块都启用了数据绑定。下面是堆栈跟踪。
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/databinding/library/baseAdapters/DataBinderMapperImpl;
at com.xyz.sdk.DataBinderMapperImpl.collectDependencies(DataBinderMapperImpl.java:274)
at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:58)
at androidx.databinding.MergedDataBinderMapper.addMapper(MergedDataBinderMapper.java:60)
at androidx.databinding.DataBinderMapperImpl.<init>(DataBinderMapperImpl.java:5)
at androidx.databinding.DataBindingUtil.<clinit>(DataBindingUtil.java:32)
at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
at com.xyz.sdk.landing.LandingPageActivity.onCreate(LandingPageActivity.java:51)
at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669) …Run Code Online (Sandbox Code Playgroud)