2017-08-07 59 views
0

在我的应用程序中,我有一个显示元素列表的微调框。用户可以选择其中一个,然后点击“确认”按钮。 但是,元素列表也可能为空:在这种情况下,我不希望按钮被启用。我尝试以编程方式完成此行为,但我没有成功:按钮始终显示为已启用。我错过了什么? 这里是我的代码:按钮不会将程序设置为禁用

Spinner dropdownProperty; 
AppCompatButton confirmBtn; 
... 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
super.onActivityCreated(savedInstanceState); 


dropdownProperty.setOnItemSelectedListener(new 
AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, 
            int position, long id) { 

     if(dropdownProperty.getSelectedItem().toString().equals("")) 
     confirmBtn.setEnabled(false); 
        else confirmBtn.setEnabled(true); 
     } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
          } 
    }); 
... 
} 

我也试过来管理onNothingSelected方法的情况,但它并没有帮助。

有什么想法?谢谢

+0

为什么不检查元素列表中的空值,不要将它们添加到第一位? –

+0

'dropdownProperty.getSelectedItem()'在这个方法中你得到了什么类型的对象?并告诉我们你的适配器 – Fr099y

回答

1

您只在OnItemSelectedListener内启用/禁用Button,这意味着用户实际上必须选择一个项目才能设置Button的状态。如果没有物品可供选择,那永远不会发生。

您应该在下拉菜单中的项目发生变化时启用/禁用Button。我看不到你的代码的其余部分,但大概你正在设置你的dropdownProperty列表。只需检查列表是否为空,并相应地设置Button的状态。

0
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
super.onActivityCreated(savedInstanceState); 
//first disable confirm button 
    confirmBtn.setEnabled(false); 

dropdownProperty.setOnItemSelectedListener(new 
AdapterView.OnItemSelectedListener() { 
@Override 
public void onItemSelected(AdapterView<?> parent, View view, 
           int position, long id) { 

    if(dropdownProperty.getSelectedItem().toString().equals("")) 
    confirmBtn.setEnabled(false); 
       else confirmBtn.setEnabled(true); 
    } 

@Override 
public void onNothingSelected(AdapterView<?> parent) { 
         } 
}); 
... 
} 

注意:最初如果你有默认值选择,那么这可能会被修改。

0

您应该保持您的按钮在视图的XML中默认为禁用,或者如果您在java中创建按钮,那么在创建按钮时将其保持禁用状态。只有在从微调器中选择一个项目时才启用它。