Я пытаюсь создать составной элемент управления на Android, содержащий (помимо прочего) ScrollView. Все происходит неправильно, когда я пытаюсь просмотреть элемент управления в Eclipse, сбой с помощью NullPointerException после сообщения об ошибке: «Parser не является BridgeXmlBlockParser».Программно создавая scrollview (s) из пользовательского компонента в android
StackTrace:
java.lang.NullPointerException
at android.view.View.<init>(View.java:1720)
at android.view.ViewGroup.<init>(ViewGroup.java:277)
at android.widget.FrameLayout.<init>(FrameLayout.java:83)
at android.widget.ScrollView.<init>(ScrollView.java:128)
at android.widget.ScrollView.<init>(ScrollView.java:124)
at android.widget.ScrollView.<init>(ScrollView.java:120)
at my.compound.control.StringPicker.onMeasure(StringPicker.java:46)
...
Я проследил ошибку в следующих условиях:
- NPE выкинули, потому что
Context.obtainStyledAttributes()
вызов возвращаетnull
когдаattrs
переданный аргументnull
. - Это относится только к реализации
BridgeContext
, используемой в Eclipse, которая ожидает, чтоattrs
будет экземпляромBridgeXmlBlockParser
. - Аргумент
attrs
:null
, потому что я создаю ScrollView с помощью конструктора (Context).
Существует обходной путь, конечно, который проходит в attrs
я получаю, когда Eclipse, конструирует контроль соединения, но я не хочу, чтобы все атрибуты, установленные на контроле соединения обратиться к моему внутреннему контролю.
Я делаю что-то неправильно, это ошибка в Android Eclipse, ...?
Это то, что my.compound.control.StringPicker.onMeasure выглядит (раздели его немного для ясности):
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (this.getChildCount() != requestedLength) {
this.removeAllViews();
int childWidth = getWidth()/requestedLength;
int childHeight = getHeight();
for (int i = 0; i < requestedLength; i++) {
ScrollView child = new ScrollView(getContext()); // NPE here
child.setLayoutParams(new LayoutParams(childWidth, childHeight));
addView(child);
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Не могли бы вы показать нам, как вы построили его в my.compound.control.StringPicker.onMeasure? В противном случае мы не можем сказать, что случилось. –
Я добавил его, надеюсь, что это поможет :) – beetstra
Какая линия 46? И если вы разделите это, мы не сможем увидеть, что не так. – CrackerJack9