Итак, у меня есть этот пользовательский макет.
public class MyCustomView extends ConstraintLayout {
private Button myFancyButton;
public MyCustomView (@NonNull Context context, AttributeSet attrs) {
super(context,attrs);
myFancyButton = findViewById(R.id.button); //THIS IS NULL
}
public void init(){
myFancyButton = findViewById(R.id.button); //WORKS GREAT
}
}
Проблема в том, что я бы предпочел не создавать функцию "init" для выполнения работы, подходящей для конструктора. Проблема, с которой я сталкиваюсь при вызове findViewById в конструкторе, заставляет его быть нулевым. Использование функции init для объекта MyCustomView работает просто отлично. Но я предпочитаю делать это в конструкторе.
Соответствующий файл XML выглядит следующим образом.
<?xml version="1.0" encoding="utf-8"?>
<se.test.test.test.MyCustomView xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<Button
android:id="@+id/button"
android:layout_width="100dp"
android:layout_height="100dp"
android:text="B1"
android:textSize="30sp"/>
</se.test.test.test.MyCustomView>