1

我正在创建一个片段并将其添加到使用 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 用作构造函数?我在这里很困惑。

谢谢

4

1 回答 1

7

不。

你需要一个带有片段的默认构造函数,一个不带参数的构造函数是一个“默认构造函数”(这可能是 c++ 术语),因为它允许你构造一个对象,当然。

因为 Android 可能需要 RAM 或者它可以杀死你的 Fragment 的东西,它也可能把它们带回来。

如果将内容传递给构造函数,Android 操作系统如何知道这些内容在需要重新创建片段时将其传递给您?它没有——这个问题没有答案。

因此默认构造函数。

重新创建片段时,Android 将附加一个活动,您可以使用 onActivityAttached (或类似的东西,查找片段生命周期)来获取活动。如果您知道活动实现/扩展 a whatever,则可以将该活动转换为 awhatever并存储它,无论您需要做什么。

onCreateview 方法顾名思义:被调用的东西返回一个视图。当 Android 想要代表您的片段的视图时调用它,它不是构造函数,既不被考虑,也不在实际中。

于 2013-10-28T22:57:56.270 回答