双向绑定无法解析 setter

2023-12-26

我正在尝试了解数据绑定我有我的信用卡 ViewModel 类,它在我的片段中绑定,如下所示

public class CreditCardValidatorFragment extends Fragment {

    private CreditCardViewModel cardViewModel;
    private CcValidateFragmentBinding binding;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.cc_validate_fragment, container, false);
        return binding.getRoot();
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        cardViewModel = ViewModelProviders.of(this).get(CreditCardViewModel.class);
        binding.setCreditCardViewModel(cardViewModel);
        binding.submitButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Navigation.findNavController(view).navigate(CreditCardValidatorFragmentDirections.actionMainFragmentToSecondFragment("Arvinder"));
            }
        });
        //required to update UI with Live data
        binding.setLifecycleOwner(this);

    }

}
public class CreditCardViewModel extends ViewModel {
    private MutableLiveData<String> firstName = new MutableLiveData<>();
    private MutableLiveData<String> lastName = new MutableLiveData<>();
    private MutableLiveData<Long> ccNumber = new MutableLiveData<>();
    private MutableLiveData<Integer> ccType = new MutableLiveData<>();
    private MutableLiveData<String> exp = new MutableLiveData<>();
    private MutableLiveData<Integer> cvv = new MutableLiveData<>();

    public String getFirstName() {
        return firstName.getValue();
    }

    public String getLastName() {
        return lastName.getValue();
    }

    public Long getCcNumber() {
        return ccNumber.getValue().longValue();
    }

    public Integer getCcType() {
        return ccType.getValue();
    }

    public String getExp() {
        return exp.getValue();
    }

    public Integer getCvv() {
        return cvv.getValue();
    }

    public void onCvvTextChanged(CharSequence text) {
        cvv.setValue(Integer.valueOf(text.toString()));
    }

    public void onFirstNameChanged(CharSequence text) {
        firstName.setValue(text.toString());
    }

    public void onLastNameChanged(CharSequence text) {
        lastName.setValue(text.toString());
    }

    public void onCCNumberChanged(CharSequence text) {
        ccNumber.setValue(Long.valueOf(text.toString()));
    }

    public void onExpChanged(CharSequence text) {
        exp.setValue(text.toString());
    }

    public void onCCTypeChanged(CharSequence text) {
        ccType.setValue(Integer.valueOf(text.toString()));
    }
}

我的布局的一部分

<EditText
            android:id="@+id/cvvEdit"
            android:layout_width="wrap_content"
            android:layout_height="48dp"
            android:layout_marginStart="36dp"
            android:layout_marginLeft="36dp"
            android:layout_marginTop="24dp"
            android:afterTextChanged="@{(text) -> creditCardViewModel.onCvvTextChanged(text)}"
            android:ems="10"
            android:inputType="number"
            android:text="@={creditCardViewModel.cvv}"
            app:layout_constraintStart_toEndOf="@+id/cvv"
            app:layout_constraintTop_toBottomOf="@+id/expirationEdit" />

尝试在布局中设置 cvv 时收到以下错误:

      android:text="@={creditCardViewModel.cvv}"

The expression 'creditCardViewModel.getCvv()' cannot be inverted, so it cannot be used in a two-way binding

Details: Two-way binding cannot resolve a setter for java.lang.Integer property 'cvv'

我尝试在 viewModel 中添加 getter 和 setter 以正确获取属性,但仍然收到错误。


将其设为 ViewModel 中公开的私有变量

public MutableLiveData<String> firstName = new MutableLiveData<>();
public MutableLiveData<String> lastName = new MutableLiveData<>();
public MutableLiveData<Long> ccNumber = new MutableLiveData<>();
public MutableLiveData<Integer> ccType = new MutableLiveData<>();
public MutableLiveData<String> exp = new MutableLiveData<>();
public MutableLiveData<Integer> cvv = new MutableLiveData<>();

你必须将你的整数转换为字符串

android:text="@={String.valueOf(creditCardViewModel.cvv)}"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双向绑定无法解析 setter 的相关文章

  • 围绕二维坐标系中的特定点缩放

    Below is an image my coordinate system 我想做的是 我想开始围绕画布中的特定点进行缩放 缩放工作正常 但我的问题是我不知道如何计算缩放时移动画布的量 请注意 我我没有使用canvas scale 我只是
  • 视图绑定对应用程序大小的影响有多大?

    View Binding 按照文档的规定 为每个XML元素生成一个Binding类 以方便访问和检查 并减轻如下的时间负担 findViewById 虽然findViewById通过更昂贵的关联搜索进行操作 由于映射 绑定应该 直接 访问
  • Android:每次单击导航抽屉项时创建一个新片段更好,还是加载以前创建的片段更好?

    我正在为 Android 实现标准导航抽屉模式 用户可以从抽屉中导航到大约 10 个片段 目前 每次单击不同的导航抽屉项目时 我都会创建一个新的片段 如下所示 When a new navigation item at index is c
  • 如何从 WifiP2pDeviceList 获取 wifi direct 设备名称

    我想在执行请求对等点时获取 wi fi direct 名称 这是我的代码 if WifiP2pManager WIFI P2P PEERS CHANGED ACTION equals action Log d tag success dis
  • Android:创建具有关系的 SQLite 数据库

    我正在尝试创建一个需要具有一对多关系的两个表 SQLite 数据库的应用程序 基本上 第一个表将允许用户创建一名员工 当他们点击该员工时 他们将进入第二个活动 该活动将允许用户为该员工添加多个电话号码 这些电话号码存储在第二个表中 我真的不
  • 使用 Android WebViewClient 启用特定 SSL 协议

    我的应用程序使用WebViewClient与服务器建立 SSL 连接 服务器配置为仅接受 TLSv1 1 及以上协议 使用 Android 时 如何检查哪些 SSL 协议是 a 支持的和 b 默认启用的WebViewClient在设备上 如
  • 对齐卡片视图中的项目

    我希望我的卡片如下所示 我保持这样的布局
  • Kotlin - 即使有 init() 函数,属性也必须初始化或者是抽象的

    我已使用 Android Studio 3 0 将此代码从 Java 转换为 Kotlin internal var background Drawable internal var xMark Drawable private fun i
  • 防止 FragmentPagerAdapter 中的 WebView 重新加载?

    我有一个 FragmentPagerAdapter 用于显示大约 6 个选项卡 所有选项卡都从 Web 服务器加载数据 其中一个选项卡包含一个从我的服务器加载图像的 WebView 生成图像的服务器端成本很高 因此我想减少重新加载 WebV
  • 在 Marshmallow 中获取蓝牙本地 mac 地址

    在 Marshmallow 之前 我的应用程序将通过以下方式获取其设备 MAC 地址BluetoothAdapter getDefaultAdapter getAddress 现在 随着 Marshmallow Android 的回归02
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 动态选取框文本

    是否可以将列表视图的 java 编码中的文本添加到 Android 中的选取框滚动中 如果可以 请告诉我如何做 如果需要 我将发布使用的代码 这是列表视图使用的 XML 如下
  • 单击输入字段会触发窗口调整大小

    我有一个带有徽标 菜单和搜索的标题 当我在桌面上时 我会按该顺序显示所有元素 但如果我的窗口宽度小于 980 像素 菜单会隐藏 有一个切换按钮 并且徽标会与nav并附在徽标之后 如果宽度更大 则徽标将再次分离并附加到 DOM 中的旧位置 w
  • 检查应用程序是否首次运行[重复]

    这个问题在这里已经有答案了 我是 Android 开发新手 我想根据应用程序安装后首次运行来设置一些应用程序的属性 有什么方法可以发现应用程序是第一次运行 然后设置其首次运行属性吗 下面是一个使用的例子SharedPreferences实现
  • 从代码动态更改多个文本视图的大小(没有“磁盘上”xml 主题)?

    我有 10 个文本视图在我的代码中 我想更改所有代码的字体大小 在我的布局中我使用了 style定义通用属性 但是我不知道一旦布局出现在屏幕上如何从代码中更改它们 我不想做的是更新 AND 对象 但只写在一处 我知道我可以使用应用主题但这假
  • Facebook Android 意图

    我对这个意图有疑问 这个意图是发送文本类型的消息 一切正常 电子邮件 短信 推特以及手机上的任何内容 但唯一有问题的是facebook 它会尝试以链接而不是文本的形式发布 Intent s new Intent android conten
  • Android - 主页按钮发出什么意图?

    我想知道设备的主页按钮到底执行什么操作 即 当您单击主页按钮时会发出什么意图 意图类别和操作 回到空白的主屏幕 我想知道在单击我自己的自定义按钮时实现此操作涉及什么 谢谢 PS我知道这不是标准的 但我的设备也不是 如果您想显示主屏幕 可以通
  • 带动画的 ScrollTo(0,250) Android ScrollView

    当我滚动到 0 250 时 我想在滚动动作中包含一个动画 我做了这段代码 但它没有根据动画滚动 scrollMe 是滚动小部件 id ObjectAnimator anim ObjectAnimator ofInt scrollMe tra
  • 无法通过usb调试安装android应用程序

    我知道这是一个老问题 但我第一次尝试在 Redmi note 4 上安装我的应用程序 每当我尝试安装时 它都会显示一个对话框 安装失败 并显示消息无法建立会话 通过卸载现有版本的 apk 如果存在 然后重新安装 可能可以解决此问题 警告 卸
  • 如何检测用户是否禁用 GPS(Android - Play 服务)

    我使用 gms location LocationListener Google Play 服务 来获取用户的位置 它工作正常 但我想检测用户何时禁用或启用他 她的 GPS 就像这张照片一样 当我打开 关闭位置时 不会调用任何方法 当我切换

随机推荐

  • 在C#中创建spy++的函数“查找窗口...”

    我想在 C 中创建与间谍 相同的函数 查找窗口 我尝试过WINAPI的这个功能 HWND WINAPI WindowFromPoint in POINT Point http msdn microsoft com en US library
  • 使用 Jackson 时,System.out.println(new ObjectMapper().readTree(jsonStringObject));打印 JSON,键和值之间有随机空格

    非常奇怪的行为 当我刚刚打印System out println jsonStringObject 它正确且良好地打印 JSON 但是当我使用 Jackson 的 API 时 即new ObjectMapper readTree jsonS
  • Spring MVC中的UTF-8编码问题

    我有一个 Spring MVC bean 我想通过设置编码 UTF 8 返回土耳其字符 但虽然我的字符串是 但它返回为 而且当我查看响应页面 即 Internet Explorer 页面 时 编码是西欧 ISO 而不是 UTF 8 这是代码
  • IBM Worklight v6.0 - 将应用程序添加到移动测试工作台时出错

    我有一个 Worklight 应用程序 并从中创建了一个 apk 文件 创建了一个测试项目 将 apk 文件添加到工作台时 出现错误 应用程序xxx apk无法导入 它要么是无效的 要么是 它包含不支持的特定功能 尝试打开工作灯工作区的 l
  • pm2 守护进程在几个小时后终止

    我有一个 Node js Express 应用程序 它实现了一组 REST API 并且我正在尝试使用 pm2 来管理其部署 该应用程序启动正常 使用pm2 start ecosystem config js 并保持可用几个小时 但 pm2
  • Bootstrap ScrollSpy 上的简单缓动

    我认为对于那些了解 javascript jquery 的人来说这是一个非常简单的问题 我对这一切都很陌生 无法做到 我发现计算导航栏偏移的代码如下所示 var offset 50 navbar li a click function ev
  • 如何强制列表对象输入“double”

    代码 a lt structure list X Days c 10 38 66 101 129 185 283 374 Names X Days Then a is like X Days 1 10 38 66 101 129 185 2
  • 使用 https 时基于主机的 nginx 代理

    我需要使用 Nginx 作为 SSL 代理 它根据子域将流量转发到不同的后端 我似乎到处都应该定义多个 server 部分 但这对于 SSL 来说不能正常工作 这样做时 我始终会在第一个虚拟主机中处理 SSL 因为在处理 https 流量之
  • 无法在 macOS Monterey 12.3 上安装 psycopg2-binary

    我一直在尝试为我的 django 项目安装 psycopg2 binary 但到目前为止没有任何效果 它不断要求pg config文件 据我所知 只有在构建 psycopg2 时才需要该文件 那么 这里发生了什么 Collecting ps
  • VS 2013 ASP.NET调试时无法修改代码

    我正在处理一个 ASP NET 2 0 项目 该项目已从 vs 2005 gt 2010 gt 2013 升级 在 vs 2005 和 2010 中 我可以在调试时修改代码 保存更改并重新加载应用了更改的页面 现在与 2013 年相比 我无
  • 在 C 中区分 typedef 的类型/标记名称有哪些优点?

    一些代码库使用不同的标识符tag和type eg typedef struct foo int bar foo 代替 typedef struct foo int bar foo 这里详细解释了这些差异 C 中 struct 和 typed
  • 在 R 中的 for 循环中创建列

    我在 R 中有一个数据框 我想在 for 循环中创建新列 在过去的两天里我尝试了很多事情但没有成功 最后 我确实找到了一个似乎可行的解决方案 但看起来并不那么直接 我想知道是否有人有更优雅的方法来做到这一点 抱歉 如果这个问题已经得到解决
  • 使用 D3.js 为每个数据成员附加多个非嵌套元素

    我想使用 d3 创建多个非嵌套元素来创建如下结构 div p from data 0 p p from data 0 p p from data 1 p p from data 1 p p from data 2 p p from data
  • TSQL - 如何判断 SQL 是否是集群的?

    有没有办法使用 TSQL CMD 脚本或 VB 脚本来告诉 1 如果 SQL Server 集群在服务器上 并且 2 是否是主动节点 Thanks 这两个都可以使用找到 SELECT FROM fn virtualservernodes 如
  • Tensorflow编译运行很长时间

    所以我正在尝试编译TensorFlow来自源头 使用 2019 年 1 月 31 日的 git 存储库中的克隆 我从他们的 shell 脚本安装了 Bazel https github com bazelbuild bazel releas
  • 根据第一列中的数字分割矩阵

    我有一个具有以下形式的矩阵 M 1 4 56 1 1 3 5 1 1 3 6 4 2 3 5 0 2 0 0 0 3 1 2 3 3 3 3 3 我想根据第一列中给出的数字分割这个矩阵 所以我想将矩阵拆分为 A 1 4 56 1 1 3 5
  • 如何取消 git bare 存储库中的最后一次提交?

    考虑到有几个 git 命令在裸存储库中没有任何意义 因为裸存储库不使用索引并且没有工作目录 git reset hard HEAD 不是取消提交此类存储库中最后更改的解决方案 通过互联网搜索 我能找到与该主题相关的所有内容this http
  • 通过 ADB 创建 AVD 配置文件

    有什么方法可以获取或查看所有设备的 Android 调试桥 Shell 中的属性 正如我所见 adb shell 仅显示和检索已连接的设备的当前会话的当前进程 我只是想知道有一个 adb shell 脚本命令可以查看该设备的所有技术产品信息
  • MSSQL Server Management Studio (SSMS) 2005 新查询模板

    如何更改 SSMS 2005 中的默认 新查询 模板 发布这个问题作为参考 我做了一些谷歌搜索 发现了一个简单的方法 http weblogs asp net cabhilash archive 2008 11 23 sql server
  • 双向绑定无法解析 setter

    我正在尝试了解数据绑定我有我的信用卡 ViewModel 类 它在我的片段中绑定 如下所示 public class CreditCardValidatorFragment extends Fragment private CreditCa