Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Inputfilter für edittext in Kotlin
#1
moin, ich bin kotlin/programmieranfänger und versuche grade einen inputfilter für eine edittext-view zu bekommen.

per google finde ich einige code-snippets in java, zB:


Code:
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;
   }
}

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


ich bin nicht sicher, wo ich die klasse einfügen soll. in der main-activity, oder in der activity mit der edittext-view?

probiert habe ich schon beides, bekomme aber nur fehlermeldungen vom android-studio.

nachdem androidstudio den klassen-code in kotlin transformiert hat, sieht er so aus und wirft einen fehler, wegen "return null"


Code:
class InputFilterMinMax : InputFilter {
   private var min: Int
   private var max: Int

   constructor(min: Int, max: Int) {
       this.min = min
       this.max = max
   }

   constructor(min: String, max: String) {
       this.min = min.toInt()
       this.max = max.toInt()
   }

   override fun filter(
       source: CharSequence,
       start: Int,
       end: Int,
       dest: Spanned,
       dstart: Int,
       dend: Int
   ): CharSequence {
       try {
           val input = (dest.toString() + source.toString()).toInt()
           if (isInRange(min, max, input)) return null
       } catch (nfe: NumberFormatException) {
       }
       return ""
   }

   private fun isInRange(a: Int, b: Int, c: Int): Boolean {
       return if (b > a) c >= a && c <= b else c >= b && c <= a
   }
}


mit den folgenden zwei zeilen soll wohl der filter für die entsprechene edittext-view gesetzt werden (ich nehm an, den code pack ich dann auch in die activität der edittext-view.
Code:
EditText et = (EditText) findViewById(R.id.myEditText);
et.setFilters(new InputFilter[]{ new InputFilterMinMax("1", "12")});
das wirft dann folgenden fehler im android-studio:

expecting a top level declaration

quelle des codes:  
https://stackoverflow.com/questions/1421...in-android



kann mir evtl jemand kurz erklären, wie ich den code verwenden kann? ich bastel grade in meinem übungsprojekt an deutlich einfacheren sachen, aber ein eingabefilter wäre doch schon ganz hilfreich, auch wenns das verständnis noch übersteigt. Big Grin

vielen dank!!
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste