Android Fragment重新实例化错误

时间:2011-11-26 01:14:41

标签: android

在我旋转屏幕之前,我以为我已经完成了对片段的转换。我收到以下类型的错误:

RuntimeException:无法启动活动ComponentInfo {com.ghcssoftware.gedstar / com.ghcssoftware.gedstar.GedStar}:android.support.v4.app.Fragment $ InstantiationException:无法实例化片段com.ghcssoftware.gedstar.PersonTab $ PersonTabFrag:确保类名存在,是公共的,并且具有公共

的空构造函数

有问题的类确实存在,是公共的,我添加了一个空构造函数,结果没有变化。看一些示例代码,我注意到与编写代码的方式有些不同,尽管我也看不到空构造函数:

1)是否有任何理由要宣布我的片段类"静态"有多少样品?

2)我是否需要实施" newInstance"在我的片段类中?为什么这样做而不是只有一个构造函数?例如,来自V14样本之一:

public static class CountingFragment extends Fragment {
    int mNum;

    /**
     * Create a new instance of CountingFragment, providing "num"
     * as an argument.
     */
    static CountingFragment newInstance(int num) {
        CountingFragment f = new CountingFragment();

        // Supply num input as an argument.
        Bundle args = new Bundle();
        args.putInt("num", num);
        f.setArguments(args);

        return f;
    }

我对某些Java概念仍然有点不熟悉,所以可能会遗漏一些基本的东西。

道格戈登   GHCS软件

2 个答案:

答案 0 :(得分:4)

  

是否有任何理由要宣布我的片段类"静态"有多少样品?

只有它是内在的某种东西。由于您的内容似乎是PersonTab的内部类,因此它需要是静态的。或者,将其移出PersonTab以外的独立Java类。

  

我是否需要实施" newInstance"在我的片段类中?为什么这样做而不只是有一个构造函数?

这只是一种工厂方法。框架不要求它。

答案 1 :(得分:0)

2)。 传递一个变量throw newInstance函数参数,在你的情况下它是num,允许排除需要在constractor和onCreateView之间带来值的类私有变量。对于int变量,它什么都没有,但是对于长串... 问候, 尤里