ScrollViewを含む(とりわけ)複合コントロールをAndroidで構築しようとしています。Eclipseでコントロールを表示しようとすると、「パーサーはBridgeXmlBlockParserではありません」というエラーメッセージの後にNullPointerExceptionが発生してクラッシュします。
スタックトレース:
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)
...
エラーを次の条件まで追跡しました。
- 渡された引数が。の場合に
Context.obtainStyledAttributes()
呼び出しが返されるため、NPEがスローされます。null
attrs
null
- これは、のインスタンスであることが
BridgeContext
期待されるEclipseで使用される実装にのみ適用されます。attrs
BridgeXmlBlockParser
attrs
引数は、null
(コンテキスト)コンストラクターを使用してScrollViewを作成するためです。
もちろん、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);
}