0

私はこのようなことを試みています

public class CustomViewSubclass extends HorizontalScrollView{

private LinearLayout layout;

public CustomViewSubclass(Context context) {
    this(context,null,0);
}

public CustomViewSubclass(Context context, AttributeSet attrs) {
    this(context,attr,0);
}

public CustomViewSubclass(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    layout = new LinearLayout(context);
}

// This is called from the `Activity`
public void startAsyncTask() { // code }

// This method is called in the `onPostExecute()` of an `AsyncTask` subclass
public void doSomething(Context context) {
    ImageView image = ImageView(context);

    layout.addView(image); // NullPointerException here, layout seems to be null
}

しかし、layoutondoSomething()はnullのようです。それはどのように可能ですか?コンストラクターで初期化しています...そして、再度初期化することはありません。

カスタムビューを追加していますXML

<com.mypackage.CustomViewSubclass
    android:layout_width="wrap_content"
    android:layout_width="match_parent" />
4

1 に答える 1

0

OK、私はそれを修正しました。それは私が犯した愚かな間違いでした:

を使用super()する代わりに、3 つの方法で使用しましたthis()

public CustomViewSubclass(Context context) {
    super(context,null,0);
}
public CustomViewSubclass(Context context, AttributeSet attrs) {
    super(context,attr,0);
}
public CustomViewSubclass(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    layout = new LinearLayout(context);
}

解決:

public CustomViewSubclass(Context context) {
    this(context,null,0);
}
public CustomViewSubclass(Context context, AttributeSet attrs) {
    this(context,attr,0);
}
public CustomViewSubclass(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    layout = new LinearLayout(context);
}
于 2013-07-17T23:01:45.260 に答える