2013-01-17 26 views
0

在代碼中,我有一個整型變量。在GUI中,我有一個數字editText字段和兩個按鈕,它們將變量的值增加/減少一個。如何將數值editText字段與變量綁定,以便它們可以自動更新兩種方式?

我需要將字段鏈接到變量,以便字段在每次更改變量時(即按下按鈕時)顯示變量的當前值,並在用戶使用編輯字段時自動設置變量值Android鍵盤。最好是,我希望它自動更新變量而不需要按「完成」(如果可能),但是我還需要設置數字的限制。此外,每次更改值時都需要調用一個方法。

我已經能夠找到如何根據請求(到一個變量)從editText中讀取值,以及如何在字段中(從一個變量)設置特定的文本。但是,當我需要動態地將該字段用作輸入和輸出時,這似乎並不實用。例如,按下按鈕時,它會更改變量,然後更改該字段,但這也會觸發onTextChanged觀察器,然後再次獲取字段文本並將其設置爲值。我假設必須有一個更有效的方法來做到這一點。

回答

0

有沒有必要發明一個車輪。 Android框架爲此提供了小部件 - NumberPicker


編輯:如果您不能或不想使用NumberPicker,這裏的想法:

private class NumberPicker { 
    private int value=0; 

    private Button btnIncr; 
    private Button btnDecr; 
    private EditText editText; 

    public NumberPicker(Button btnIncr, Button btnDecr, EditText editText) { 
     this.btnIncr=btnIncr; 
     this.btnDecr=btnDecr; 
     this.editText=editText; 

     this.btnIncr.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       value++; 
       NumberPicker.this.editText.setText(String.valueOf(value)); 
      } 
     }); 

     this.btnDecr.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       value--; 
       NumberPicker.this.editText.setText(String.valueOf(value)); 
      } 
     }); 

     editText.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       value=Integer.parseInt(s.toString()); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
      } 
     }); 
    } 

    public int getValue() { 
     return value; 
    } 
} 

而且不用擔心TextWatcher當值被改變觸發鈕釦。這不應該導致任何問題。

+0

我使用API​​版本7. NumberPicker小部件只出現在API 11中。而且我還需要按鈕和字段具有特定的大小和佈局,因此我無法使用單個小部件。 – aatnx

相關問題