2012-05-19 95 views
1

此刻我打電話和結構片段是這樣的:使用android碎片的最佳做法?

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

但我不知道,如果這就是所謂的最佳做法,因爲這對我來說似乎是很多樣板代碼。有更好的方法嗎?

回答

1

使用XML佈局和片段類。這裏我創建了一個包含2個片段的佈局。該類充氣佈局fragment_actionbarcompat.xml(該代碼不顯示在這裏,但它是一個基本的佈局文件)。然後爲包含這兩個片段的活動創建一個佈局文件。

ActionBarCompatFragment類重寫onCreateView方法來擴大它的佈局。這被注入到片段標籤layoutwise。

在你的情況下,通常你不只是添加一個普通的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: [email protected]/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: [email protected]/fragment_composer --> 
    </fragment> 

</RelativeLayout> 
+0

是的,這就是我。 上面的代碼顯示了我的Activity'onCreate()',它實例化了'MyListFragment extends ListFragment'。 但我想知道是否有更好的方式來「調用」一個片段除了我上面發佈的代碼(檢查null,創建新的myfragment,開始,提交等)。 – membersound

+0

使用XML方式,Android系統將爲您實例化片段。它基本上在幕後讀取XML並使用反射來完成此操作。然後你可以通過調用Activity.getSupportFragmentManager()來獲得片段本身的句柄。findFragmentById(R.id. *); (刪除Activity.getFragmentManager()如果不使用支持包) –

+0

哦,它確實沒有初始化片段我自己。你剛纔提到的findFragement就足夠了。非常感謝,現在讓我的代碼變得更好。 – membersound