Android片段的最佳实践?

时间:2012-05-19 15:42:27

标签: java android android-fragments

目前我正在打电话并建立这样的片段:

if (getSupportFragmentManager().findFragmentById(R.id.fragment_list) == null) {
     list = new MyListFragment();
     getSupportFragmentManager().beginTransaction().add(R.id.fragment_list, list).commit();
}

但是我想知道这是否是所谓的最佳实践,因为在我看来这是很多样板代码。还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

使用XML布局和Fragment类。在这里,我创建一个包含2个片段的布局该类使布局fragment_actionbarcompat.xml膨胀(该代码未在此处显示,但它是基本布局文件)。然后我为包含2个片段的活动创建了一个布局文件。

ActionBarCompatFragment类重写onCreateView方法以扩展它的布局。这将被布局注入片段标记。

在您的情况下,通常您不只是添加简单的ListFragment,而是扩展ListFragment并将自定义代码添加到其中。这是一种更好地支持模型 - 视图 - 控制器等奇特模式的方法。碎片意味着是隔离的隔间,因此如果您愿意,可以在活动之间重复使用它们。在大多数情况下,您的类将保留加载片段所需数据的逻辑。

<强> ActionBarCompatFragment.java

@Override
public final View onCreateView(LayoutInflater inflater, ViewGroup root, Bundle savedInstanceState) {
    final int layoutId = R.layout.fragment_actionbarcompat;
    return inflater.inflate(layoutId, root, false);
}

文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <fragment
        android:id="@+id/ActionBarCompatFragment"
        android:layout_width="@dimen/ActionBarSize"
        android:layout_height="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        class="com.packagename.app.ActionBarCompatFragment" >

        <!-- Preview: layout=@layout/fragment_actionbarcompat -->
    </fragment>

    <fragment
        android:id="@+id/ComposerFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@id/ActionBarCompatFragment"
        class="com.packagename.app.ComposerFragment" >

        <!-- Preview: layout=@layout/fragment_composer -->
    </fragment>

</RelativeLayout>