2017-05-10 10 views
1

私は1つのアクティビティに3つのテキストボックスを持ち、それぞれに異なるMinMaxフィルタを設定したいと考えています。今は最初の2つが機能していますが、最後の機能は機能しません。私はそれに何も入力することはできません。ここでまた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よりも小さいことを確認します。したがって、数字を入力することはできません。要するに、このような最小数のフィルタを使用すると問題が生じる可能性があります。おそらく、編集テキストのフォーカスを失った/獲得した場合にのみ、チェックを実行する必要があります。

あなたは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のために働く。私はAndroidスタジオとJavaに新しい:( – Dimi

関連する問題