我试图在Android中构建一个复合控件,其中包含(除其他外)一个ScrollView。当我尝试查看Eclipse中的控件时发生错误,在出现错误消息后出现NullPointerException:“解析器不是BridgeXmlBlockParser”。以编程方式创建自定义组件中的滚动视图android
堆栈跟踪:
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
。 - 这仅适用于Eclipse中使用的
BridgeContext
实现,该实现预计attrs
是BridgeXmlBlockParser
的实例。 attrs
参数是null
,因为我使用(Context)构造函数创建了ScrollView。
当然还有一个解决办法,这是我经过时收到的Eclipse构建复合控制的attrs
,但我不希望在复合控制设置应用到我的内部控制的所有属性。
我做错了什么,这是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中创建它的?否则,我们不能说出了什么问题。 – 2010-05-21 13:20:04
我已经添加了,希望能帮到:) – beetstra 2010-05-21 13:44:20
哪一行是46?如果你把事情搞清楚了,我们可能无法看到出了什么问题。 – CrackerJack9 2011-08-18 14:00:30