【问题标题】:Best practice with android fragments?android片段的最佳实践?
【发布时间】:2012-05-19 15:42:27
【问题描述】:

目前我正在调用和构建这样的片段:

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

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

【问题讨论】:

    标签: java android android-fragments


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 是的,这就是我所拥有的。上面的代码显示了我的活动onCreate(),它实例化了MyListFragment extend ListFragment。但我想知道除了我上面发布的代码之外是否还有更好的方法来“调用”片段(检查 null、创建新的 myfragment、开始、提交等)。
    • Android系统会使用XML方式为你实例化片段。它基本上是在后台读取 XML 并使用反射来执行此操作。然后,您可以通过调用 Activity.getSupportFragmentManager().findFragmentById(R.id.*); 来获取片段本身的句柄。 (如果不使用支持包,请删除 Activity.getFragmentManager())
    • 哦,它确实可以在我自己初始化片段的情况下工作。只需您提到的 findFragement 就足够了。非常感谢,这让我的代码现在变得更好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    相关资源
    最近更新 更多