Макет не раздувается в пользовательском компоненте Android
я получаю исключение нулевого указателя в моем пользовательском представлении (которое является производным отLinearLayout
) потому что это можетне находит своих дочерних взглядов. Вот код:
public class MyView extends LinearLayout
{
public MyView(Context context, AttributeSet attrs)
{
this(context, attrs, 0);
}
public MyView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
private TextView mText;
@Override
protected void onFinishInflate()
{
super.onFinishInflate();
mText = (TextView) findViewById(R.id.text);
if (isInEditMode())
{
mText.setText("Some example text.");
}
}
}
Вот макет (my_view.xml
):
И вот как я положил это в файл XML:
Но когда я пытаюсь просмотреть его в редакторе макета, я получаю NPE наmText.setText(...)
так какgetViewById()
возвращается.null
Какие'происходит?
осветлениеЯ ожидаю, что это сработает, если я
MyView v = (MyView)inflater.inflate(R.layout.my_view);
((TextView)v.findViewById(R.id.text)).setText("Foo");
все отлично работает Разве это не то, что делает inflater макета, когда он проходит через файл макета? В любом случае, как я могу правильно обрабатывать обе ситуации (без получения бессмысленных вложенных представлений)?