2017-05-10 61 views
1

我有3個文本框在一個活動,並希望爲每個設置不同的MinMax過濾器。現在,兩個第一個工作,但我不能得到最後一個功能。我無法輸入任何內容。此外Android Studio InputFilterMinMax部分工作

public InputFilterMinMax(int min, int max) { 
 
      this.min = min; 
 
      this.max = max; 
 
     }

這裏我得到InputFilterMinMax從未使用過其得到灰色的消息。說明??

下面是完整的代碼:

public class Akt4 extends AppCompatActivity { 
 

 

 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_akt5); 
 

 

 
     EditText editTextalt = (EditText) findViewById(R.id.editTextalt); 
 
     editTextalt.setFilters(new InputFilter[]{new InputFilterMinMax("1", "65")}); 
 

 
     EditText editText2 = (EditText) findViewById(R.id.editText2); 
 
     editText2.setFilters(new InputFilter[]{new InputFilterMinMax("1", "180")}); 
 

 
     EditText editText3 = (EditText) findViewById(R.id.editText3); 
 
     editText3.setFilters(new InputFilter[]{new InputFilterMinMax("130", "220")}); 
 

 
    } 
 

 
    public class InputFilterMinMax implements InputFilter { 
 
     private int min, max; 
 

 
     public InputFilterMinMax(int min, int max) { 
 
      this.min = min; 
 
      this.max = max; 
 
     } 
 

 
     public InputFilterMinMax(String min, String max) { 
 
      this.min = Integer.parseInt(min); 
 
      this.max = Integer.parseInt(max); 
 
     } 
 

 
     @Override 
 
     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 
 
      try { 
 
       int input = Integer.parseInt(dest.toString() + source.toString()); 
 
       if (isInRange(min, max, input)) 
 
        return null; 
 
      } catch (NumberFormatException nfe) { } 
 
      return ""; 
 
     } 
 

 
     private boolean isInRange(int a, int b, int c) { 
 
      return b > a ? c >= a && c <= b : c >= b && c <= a; 
 
     } 
 

 
    } 
 
}

回答

0

的問題是,任何數字的輸入是不是在你的範圍內。

例如,如果您的輸入爲9,您的過濾器將檢查並看到9小於130.因此,不允許輸入數字。底線是使用這樣一個最小數量的過濾器可能會有問題。也許你應該只在你失去/獲得EditText的焦點時才執行檢查。

您可以添加一張支票分鐘字符爲您isInRange(),但我不知道這是你想要什麼:

private boolean isInRange(int min, int max, int input) { 
    // Assuming both numbers are positive (otherwise this might be wrong) 
    if (String.valueOf(input).length() < String.valueOf(min).length()) { 
     return true; 
    } 

    return max > min ? input >= min && input <= max : input >= max && input <= min; 
} 
+1

非常感謝您的回答!我沒有得到失去/獲得的部分。那麼,如何編寫代碼,它對editText3有效。 Im新的Android Studio和Java :( – Dimi