2017-06-19 82 views
0

我想检查来自服务器的布尔值。如果布尔值为true,我想禁用按钮单击。否则,可以点击按钮。我使用Retrofit将所有数据从服务器添加到其余禁用基于Retrofit响应的按钮

@ 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); 
    } 
+0

请参阅关于[mcve]。你有什么是三个代码 –

回答

3

不要改变单击基于标志的侦听器;相反,调用setEnabled(boolean)

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

我不太明白你的代码块标记为 “@的onCreate()” 的结构;你似乎有任何方法之外的代码,它不会编译。因此,我不能为上面的代码行建议一个特定的地方。不过,我的猜测是,正确的地方是success()方法。 (另外,假定您有一个有效的Restaurant对象,您应该先检查响应状态。)

+0

我不使用btn onClick()情况R.id.btn: 如果(!rest.isBookmarked()){ postBookmark(); //改装 }其他{ ll_bookmark.setEnabled(false); } break;什么错? –

+0

@ Tr.Buu - 只要您检测到新的“餐厅”对象,您应该立即设置按钮的启用状态。处理单击事件时,通常不会更改启用状态。 (请注意,如果'll_bookmark'是ID为'R.id.btn'的按钮,那么似乎无法重新启用按钮。) –

+0

嗨如何检查isBookmarked()是否为空。餐厅资源=新餐厅();如果(res.isBookmarked!= null){...}运算符'!=“不能应用于'布尔','null' –