1

私はそのような問題に遭遇しました:クラスpublic staticのメンバーとしていくつかのフラグメントを持ちたかったのです。Activity

しかし、そのようなフラグメントをレイアウト ファイルに配置すると、次のような例外が発生します。

Caused by: android.support.v4.app.Fragment$InstantiationException: 
Unable to instantiate fragment com.tst.MainActivity.InnerFragment:
make sure class name exists, is public, 
and has an empty constructor that is public
...

私のコードは次のようになります。

package com.tst;

public final class MainActivity extends SherlockFragmentActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public static class InnerFragment extends SherlockFragment {

        public InnerFragment() {
            super();
        }
        ...
    }
}

レイアウト ファイルは次のようになります。

<LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical" >

  <fragment
        android:id="@+id/inner_fragment"
        android:name="com.tst.MainActivity.InnerFragment"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>

今私の質問は、なぜそのようなコードがこの例外をスローするのですか? Androidはそのままインスタンス化できるはずInnerFragmentですpublic static。さらに、以前は Fragments を使用しpublic staticていましたが、それらは機能していましたが、当時は xml 定義ではなくコードでプログラムで追加していました。

よろしく、ミハル

4

1 に答える 1

4

変化する

android:name="com.tst.MainActivity.InnerFragment"

android:class="com.tst.MainActivity$InnerFragment"
于 2012-08-22T23:42:59.577 に答える