2012-05-17 68 views
0

我試圖替換合成佈局中的片段。這裏是我的根佈局XML:Android:替換合成佈局中的片段

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

    <fragment 
     android:id="@+id/buttons" 
     android:name="com.kippygo.android.touch_talker.ButtonsFragment" 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     class="com.kippygo.android.touch_talker.ButtonsFragment" > 
     <!-- Preview: [email protected]/buttons_fragment --> 
    </fragment> 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <fragment 
     android:id="@+id/buffer" 
     android:name="com.kippygo.android.touch_talker.BufferFragment" 
     android:layout_width="match_parent" 
     android:layout_height="80dp" > 

     <!-- Preview: [email protected]/buffer_fragment --> 
    </fragment> 

    <FrameLayout 
     android:id="@+id/grid_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="?android:attr/detailsElementBackground" > 

    </FrameLayout> 

</LinearLayout> 

</LinearLayout> 

正如你所看到的,我有我的佈局三個方面,包含有按鈕的片段佈局的其餘部分固定的左柱垂直管理在一個TextView片段分頂部和下部分的數據網格。

我想使用通用佈局將各種GridView元素放置在「grid_frame」中,因爲我按下「按鈕」片段中的按鈕。這裏是「grid_fragment」的佈局,我想用每一個GridView的片段:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/grid_fragment_layout" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical"> 

<GridView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/grid_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:columnWidth="80dp" 
    android:clipToPadding="true" 
    android:gravity="center" 
    android:horizontalSpacing="20dp" 
    android:numColumns="auto_fit" 
    android:orientation="vertical" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="20dp" > 
    <!-- Preview: [email protected]:layout/simple_list_item_2 --> 
</GridView> 

<TextView 
    android:id="@+id/android:empty" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textSize="22sp" 
    android:textStyle="bold" 
    android:text="@string/no_list_items"/> 

</LinearLayout> 

這種複合佈局打開了罰款,當我開始我的應用程序。我把我的的FrameLayout ID「grid_frame」第一個片段,我用下面的代碼最初的活動:

// Execute a transaction to put the categoriesFragment in the grid_view 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.grid_frame, new CategoriesFragment(), "category_fragment"); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ft.commit(); 

這工作完全正常,我看到在頂部,網格左側,文本輸入框我的按鈕的按鈕右側的很好填充的單元格。

當我點擊動態片段呈現的GridView中的一個列表項時,我想替換「grid_frame」FrameLayout中的片段。我這樣做是在用下面的代碼的「grid_frame」片段的onItemClick監聽器方法如下代碼:

// Execute a transaction to put the categoriesFragment in the grid_view 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.grid_frame, categoryWordsFragment, "category_words_fragment"); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ft.commit(); 

它看起來非常相似,我在活動中使用,以設定精細工作的初始片段代碼。

當我這樣做時,我的整個屏幕被替換爲新的片段佈局,這是另一個具有不同數據的GridView。儘管我在replace方法調用中將「grid_frame」FrameLayout指定爲容器視圖ID,但我的根佈局似乎完全被替換爲新片段膨脹的佈局。

我已經嘗試了一切,我可以找到使我的佈局保持不變,只是改變FrameLayout容器中的片段。

我在做什麼錯誤?

+0

我已經爲現在由活動實現的片段添加了回調接口,以便可以在活動類中執行片段事務。這使得片段與佈局中的其他片段分離。即使我特別聲明grid_frame FrameLayout元素是片段的目標,它仍然會導致整個顯示被新的網格視圖片段替換。 –

回答

1

問題解決了!這是一個非常愚蠢的錯誤。我已將Activity類轉換爲Fragment類,並且在此類中,我忘記了在類onCreate方法中移除對setContentView的調用。因此,每次創建新實例時,片段都會設置一個新佈局