为什么Fragment不能成为公共静态类?

时间:2012-08-22 23:31:17

标签: java android android-activity android-fragments

我遇到了这样的问题:我希望将一些片段作为public static课程的Activity成员。

但是当我将这样的Fragment放到布局文件中时,我收到了这样的异常:

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,因为它是public static。我还习惯使用{{1}}片段而且它们有效,但在那段时间我以编程方式在不在xml定义中的代码中添加它们。

此致 米甲

1 个答案:

答案 0 :(得分:4)

更改

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

android:class="com.tst.MainActivity$InnerFragment"