2017-08-07 56 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中創建按鈕,那麼在創建按鈕時將其保持禁用狀態。只有在從微調器中選擇一個項目時才啓用它。