1

私は過去にカスタムレイアウトを使用しましたが、これまでのところ、子ビューを記述してlayoutInflater.inflate関数を使用するためのxmlレイアウトファイルのみを使用しています。

今回は、xmlレイアウトファイルを使用せ、必要なすべてのビューをプログラムでカスタムレイアウトに追加します。私がしていることは:

public class myLayout extends FrameLayout  {
    private Context c;
    private LayoutParams webViewLayoutParams;

    public myLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    c = context;
    initMyWebView();
    addToLayout(mywebView,mywebViewLayoutParams);
}

    private void initMyWebView() {
    Log.d("init", "init webview");
    mywebView=new WebView(c);
    mywebViewLayoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
            FrameLayout.LayoutParams.MATCH_PARENT);


}
   private void addToLayout(View view, LayoutParams params) {
    Log.d("init", "adding child view");
    this.addView(view, params);

}
}

私のカスタムレイアウトは、メインのアクティビティレイアウトファイルでのみ「呼び出され」ます

<com.mypackage.myLayout
    android:id="@+id/myLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

ターミナルでアプリを起動すると、すぐにクラッシュします

09-07 11:17:25.035: E/ActivityThread(17250): Failed to inflate
09-07 11:17:25.035: E/ActivityThread(17250): android.view.InflateException: Binary XML file line #18: Error inflating class com.mypackage.myLayout
09-07 11:17:25.035: E/ActivityThread(17250):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:691)
09-07 11:17:25.035: E/ActivityThread(17250):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
etc...

明らかな何かが欠けていると思いますが、何が間違っているのか理解できません。私が間違っていることはありますか?

編集 私はついに問題を見つけました。それは私がプロジェクトに含めたばかりのadmoblibから来ていたので、私はそれを使用していませんでした!ADT17以降、外部JARもlibsディレクトリに存在する必要があります...誰かが同じ問題に遭遇した場合にこれが役立つことを願っています!

4

1 に答える 1

0

では、initMyWebView()2 つの変数に新しい値 (mywebViewmywebViewLayoutParams) を割り当てますが、これらはどこで開始されますか? おそらく、これらの変数を初期化するだけで済みます。

私はあなたがinitしていることがわかりますが、そうでwebViewLayoutParamsはありませんmywebViewLayoutParams

于 2012-09-07T10:26:31.577 に答える