Может ли класс - наследник EditText получить через конструктор дополнительный параметр?
есть задумка заставить EditText автоматически воздейстdовать на главное меню, путем изменения дополнительных параметров в конструкторе. Создаю класс наследник SupEditText, включаю в конструктор дополнительный int id, но приложение вылетает.
Как пример
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupEditText tv = new SupEditText(this, null, 50);
tv = (SupEditText) findViewById(R.id.textView2);
}
}
и новый класс
public class SupEditText extends androidx.appcompat.widget.AppCompatEditText{
public SupEditText(Context context, AttributeSet attrs, int id) {
super(context, attrs);
String string = String.valueOf(id);
Toast.makeText(context, "12345", Toast.LENGTH_SHORT).show();
}
}
Убрав int id (и все к нему относящееся), все запускается. Пожалуйста просветите в чем здесь дело! Спасибо за ответ)
Ответы (1 шт):
Если вы вписали вью в разметку, то обязаны объявить конструктор с двумя параметрами:
(Context context, AttributeSet attrs)
именно его использует LayoutInflater и соответственно вы не можете использовать дополнительные параметры.
Вместо этого вы можете добавить атрибут для этой вью, задать ему значение в разметке и получить в конструкторе. И/или сделать просто сеттер и выставлять его отдельно.
Конструкторы с дополнительными параметрами можно использовать только в коде - и создать экземпляр, и добавить его в контейнер.