【问题标题】:Disable a button based on Retrofit response根据改造响应禁用按钮
【发布时间】:2017-06-19 03:32:52
【问题描述】:

我想检查来自服务器的布尔值。如果布尔值为真,我想禁用按钮单击。否则,可以单击按钮。我使用 Retrofit 将所有数据从服务器添加到 rest

@api

"bookmarked": true

@餐厅对象

private boolean bookmarked;

    public boolean isBookmarked() {
        return bookmarked;
    }
    public void setBookmarked(boolean bookmarked) {
        this.bookmarked = bookmarked;
    }

@onCreate()

Restaurant rest;
Button btn;

    @Override
    public void success(Restaurant restaurant, Response response) {
        rest = restaurant;
    }

    if (rest.isBookmarked()) {
        btn.setOnClickListener(null);
    }

【问题讨论】:

标签: android button boolean retrofit


【解决方案1】:

不要根据flag改变点击监听;相反,请致电setEnabled(boolean)

btn.setEnabled(!rest.isBookmarked());

我不太了解标有“@ onCreate()”的代码块的结构;您似乎在任何方法之外都有代码,无法编译。因此,我不能为上述代码行建议一个特定的位置。但是,我的猜测是,正确的做法是在 success() 方法中。 (另外,在假设您有一个有效的 Restaurant 对象之前,您可能应该检查响应状态。)

【讨论】:

  • 我使用 btn onClick() case R.id.btn: if (!rest.isBookmarked()) { postBookmark(); // 调用改造 } else { ll_bookmark.setEnabled(false); } 休息;怎么了?
  • @Tr.Buu - 您应该在检测到新的Restaurant 对象后立即设置按钮的启用状态。在处理单击事件时,您通常不会更改启用状态。 (请注意,如果ll_bookmark 是id 为R.id.btn 的按钮,那么似乎无法重新启用该按钮。)
  • 您好如何检查 isBookmarked() 不为空。餐厅资源 = 新餐厅(); if (res.isBookmarked!=null ) { ... } 运算符 '!=" 不能应用于 'boolean','null'
  • @Tr.Buu - res.isBookmarked 是一个 boolean 值。无法与null 相提并论。您可以使用if (res.isBookmarked) { ... }if (!res.isBookmarked) { ... } 对其进行测试。 (您也可以使用if (res.isBookmarked == true) ...,但== true 部分是完全多余的,并且通常会省略样式。)
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 2021-01-06
  • 2019-03-01
  • 2021-11-14
  • 2011-11-19
  • 2021-12-13
  • 2012-06-30
相关资源
最近更新 更多