我以为在旋转屏幕之前,我已经很好地完成了对片段的转换。我得到以下类型的错误:
运行时异常:无法启动活动组件信息{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”的使用吗?为什么这样做,而不是仅仅有一个构造器?
这只是一种工厂方法。框架不需要它。