Вызов любых методов public
, static
, non-final
в конструкторе, зависит от вас, но наилучшей практикой является никогда не вызывать такие методы внутри конструктора, потому что эти методы могут быть переопределены в подклассах и на самом деле будет вызываться только переопределенная версия этих методов (если вы используете полиморфное поведение).
Например:
public class Foo {
public Foo() {
doSmth(); // If you use polymorphic behavior this method will never be invoked
}
public void doSmth() {
System.out.println("doSmth in super class");
}
public static void main(String[] args) {
new Bar(200);
}
}
class Bar extends Foo {
private int y;;
public Bar(int y) {
this.y = y;
}
@Override
public void doSmth() { // This version will be invoked even before Barr object initialized
System.out.println(y);
}
}
Он будет печатать 0.
Для подробных сведений читайте Брюс Эккель «Мышление в Java» глава «Полиморфизм»
Я мог сделать это просто:
<EditText android:id="@+id/ID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:maxLength="NUMBER" android:hint="A Hint" />
Kotlin:
edit_text.filters += InputFilter.LengthFilter(10)
ZTE Blade A520
имеет странный эффект. Когда Вы вводите больше чем 10 символов (например, 15), EditText
шоу сначала 10, но другие 5 не видимы и не доступны. Но когда Вы удаляете символы с Backspace
, это сначала удаляет правильные 5 символов и затем удаляет оставление 10. Для преодоления этого поведения используют это.
private class EditTextWatcher(private val view: EditText) : TextWatcher {
private var position = 0
private var oldText = ""
override fun afterTextChanged(s: Editable?) = Unit
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
oldText = s?.toString() ?: ""
position = view.selectionStart
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
val newText = s?.toString() ?: ""
if (newText.length > 10) {
with(view) {
setText(oldText)
position = if (start > 0 && count > 2) {
// Text paste in nonempty field.
start
} else {
if (position in 1..10 + 1) {
// Symbol paste in the beginning or middle of the field.
position - 1
} else {
if (start > 0) {
// Adding symbol to the end of the field.
start - 1
} else {
// Text paste in the empty field.
0
}
}
}
setSelection(position)
}
}
}
}
// Usage:
editTextWatcher = EditTextWatcher(view.edit_text)
view.edit_text.addTextChangedListener(editTextWatcher)