我正在创建一个片段并使用java代码将其添加到布局中。为此,我创建了2个类和2个布局。其中一个类扩展了Fragment,其他类扩展了FragmentActivity。其中一个xml文件是容器,另一个是片段。这是我的代码:
public class FragmentClass extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_layout, container,false);
return v;
}
}
以下是我如何将片段添加到布局中:
public class Fragment_Activity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.container_layout);
FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.container_layout_eklenecek_yer);
if(fragment==null){
fragment=new FragmentClass();
fm.beginTransaction().add(R.id.container_layout_eklenecek_yer, fragment).commit();
}
}
}
这段代码按照我的预期工作,但这是我的问题:我在Fragment_Activity类中有一段代码说:
fragment=new FragmentClass();
和FragmentClass没有构造函数。这是一个默认的空构造函数,还是onCreateView作为构造函数?我在这里很困惑。
由于
答案 0 :(得分:7)
没有
你需要一个带有片段的默认构造函数,一个不带参数的构造函数是一个“默认构造函数”(这可能是c ++术语),因为它允许你构造一个对象。
因为Android可能需要RAM或其他东西它可以杀死你的碎片,它也可能会带回来。
如果你将内容传递给构造函数,那么在需要重新创建片段时,Android操作系统如何知道这些内容会将其传递给您?它没有 - 这个问题没有答案。
因此是默认构造函数。
重新创建片段时,Android会附加一个活动,您可以使用onActivityAttached(或其他内容,查找片段生命周期)来获取活动。如果您知道活动实现/扩展whatever
,您可以将该活动转换为whatever
并存储它,无论您需要做什么。
onCreateview方法就是这个名字所说的:被调用的东西返回一个视图。当Android想要代表你的片段的视图时,它就被调用,它不是构造函数,既不被认为是,也不是实际的。