哪种方式更好 - 通过Java代码或XML创建片段

时间:2015-07-02 17:52:29

标签: android android-fragments

我想知道,这是创建Fragment的更好/推荐的方法吗?通过Java代码创建还是通过XML创建?

通过Java代码创建

<FrameLayout
    android:id="@+id/menu_frame"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start" />
if (savedInstanceState == null) {
    FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
    this.homeMenuFragment = HomeMenuFragment.newInstance();
    t.replace(R.id.menu_frame, homeMenuFragment);
    t.commit();
} else {
    this.homeMenuFragment = (HomeMenuFragment)(this.getSupportFragmentManager().findFragmentById(R.id.menu_frame));
}

通过XML代码创建

<fragment
    android:id="@+id/menu_frame"
    android:name="org.yccheok.xxx.HomeMenuFragment"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start" />
this.homeMenuFragment = (HomeMenuFragment)(this.getSupportFragmentManager().findFragmentById(R.id.menu_frame));

对我来说,既然两者都取得了相同的结果,那么通过XML代码创建似乎更好。在任何情况下,我们应该更喜欢通过Java代码创建吗?

2 个答案:

答案 0 :(得分:2)

无法分离/删除在XML布局中静态定义的片段。这是主要区别。如果您不需要这样做,那么请随意在XML中声明它。

答案 1 :(得分:1)

你的帖子让我想到...... 嗯,通过XML布局创建片段的一个显而易见的事情是片段是静态的,因此无法通过Java代码进行更改。也许你很好。让我们继续吧。

使用Java代码的好处:

  • 通过newInstance()传递数据的能力。例如,它可能是HomeMenuFragment.newInstance(param1, param2, ...)

  • 使用FragmentTransaction,您可以添加到Backstack。