我有一个布局,其中包含另一个具有 2 个数据模型的布局,其中一个是公共(public)的。有一个进行绑定(bind)和设置模型的 Activity 。但是有些事情让我无法理解,因为我无法让它发挥作用。 我创建了一个示例,我在下面发布它: 第一个布局是 parent_layout.xml :
<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">
<data>
<variable
name="firstModel"
type="com.example.databinding.model.FirstDataModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/first_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{firstModel.firstMsg}"
tools:text="firstMsg"/>
<include
app:firstModel="@{firstModel}"
android:id="@+id/container"
layout="@layout/child_layout"/>
</LinearLayout>
</layout>
第一个布局中包含的第二个布局是 child_layout.xml :
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="firstModel"
type="com.example.databinding.model.FirstDataModel" />
<variable
name="secondModel"
type="com.example.databinding.model.SecondDataModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/second_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{firstModel.secondMsg}"
tools:text="secondMsg"/>
<TextView
android:id="@+id/third_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{secondModel.thirdMsg}"
tools:text="thirdMsg"/>
</LinearLayout>
</layout>
使用DataBinding的Activity是IncludeLayoutActivity.java:
package com.example.databinding;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.example.binding.R;
import com.example.binding.databinding.ChildLayoutBinding;
import com.example.binding.databinding.ParentLayoutBinding;
import com.example.databinding.model.FirstDataModel;
import com.example.databinding.model.SecondDataModel;
public class IncludeLayoutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.parent_layout);
ParentLayoutBinding parentBinding = ParentLayoutBinding.inflate(getLayoutInflater());
ChildLayoutBinding childBinding = ChildLayoutBinding.inflate(getLayoutInflater());
FirstDataModel firstDataModel = new FirstDataModel("Hello", "Android");
SecondDataModel secondDataModel = new SecondDataModel("World");
parentBinding.setFirstModel(firstDataModel);
childBinding.setSecondModel(secondDataModel);
}
}
最后模型是 FirstDataModel.java:
package com.example.databinding.model;
public class FirstDataModel {
private String firstMsg;
private String secondMsg;
public FirstDataModel(String hello, String android) {
firstMsg = hello;
secondMsg = android;
}
public String getFirstMsg() {
return firstMsg;
}
public String getSecondMsg() {
return secondMsg;
}
}
而 SecondDataModel.java 是:
package com.example.databinding.model;
public class SecondDataModel {
private String thirdMsg;
public SecondDataModel(String world) {
thirdMsg = world;
}
public String getThirdMsg() {
return thirdMsg;
}
}
为什么布局中的TextView在绑定(bind)后没有被赋值?
编辑:我已经根据 Blackbelt 的建议修改了布局和 Activity 。
最佳答案
我找到了一个解决方案,我想在这里分享,问题出在我怀疑的 Activity 中,这是正确的:
package com.example.databinding;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.example.binding.R;
import com.example.binding.databinding.ChildLayoutBinding;
import com.example.binding.databinding.ParentLayoutBinding;
import com.example.databinding.model.FirstDataModel;
import com.example.databinding.model.SecondDataModel;
public class IncludeLayoutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ParentLayoutBinding parentBinding = DataBindingUtil.setContentView(this, R.layout.parent_layout);
FirstDataModel firstDataModel = new FirstDataModel("Hello", "Android");
SecondDataModel secondDataModel = new SecondDataModel("World");
parentBinding.setFirstModel(firstDataModel);
childBinding.setSecondModel(secondDataModel);
}
}
这是对具有内容布局和多模型的布局进行正确绑定(bind)的正确方法。希望这可以帮助其他人
关于android - 如何在包含的布局和多个模型中管理数据绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973329/
出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits
我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar