Наряду с классическими причинами, упомянутыми в другом месте:
setContentView()
перед findViewById()
id
вы хотите находится в представлении или макете, которую вы указали на setContentView()
id
не случайно дублируется в разных макетах Существует один Я нашел для пользовательских представлений в стандартных макетах, что противоречит документации:
Теоретически вы можете создать пользовательский вид и добавить его в макет ( см. Здесь ). Тем не менее, я обнаружил, что в таких ситуациях иногда атрибут id
работает для всех представлений в макете, кроме настраиваемых. Решение, которое я использую:
FrameLayout
теми же свойствами макета, что и пользовательское представление. Дайте ему соответствующий id
, скажем frame_for_custom_view
. onCreate
: setContentView(R.layout.my_layout);
FrameView fv = findViewById(R.id.frame_for_custom_layout);
MyCustomView cv = new MyCustomView(context);
fv.addView(cv);
, который помещает пользовательский вид в фрейм.