我以为在旋转屏幕之前,我已经很好地完成了对片段的转换。我得到以下类型的错误:
运行时异常:无法启动活动组件信息{com.ghcssoftware.gedstar/com.ghcssoftware.gedstar.gedstar}:android.support.v4.app.fragment$instantionexception:无法实例化fragment com.ghcssoftware.gedstar.persontab$persontabfrag:确保类名存在、为public和h作为公共的空构造函数
有问题的类确实存在,是公共的,我添加了一个空构造函数,结果没有变化。查看一些示例代码,我确实注意到与编写代码的方式有些不同,尽管我也没有看到空构造函数:
1)我的片段类应该像许多示例一样声明为“static”有什么原因吗?
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软件

最佳答案

我的片段类应该像许多示例一样声明为“static”,这有什么原因吗?
只有当它是某个事物的内部类时。因为您的类似乎是PersonTab的内部类,所以它需要是静态的。或者,将它移到PersonTab之外是一个独立的Java类。
我需要在片段类中实现“newInstance”的使用吗?为什么这样做,而不是仅仅有一个构造器?
这只是一种工厂方法。框架不需要它。

10-08 17:23