2012-07-26 24 views
2

我有兩個並排的片段。當我對左邊的片段執行操作時,我想要更改正確的片段。只要正確片段的layout.xml不會更改,它就會工作。我想要的是定義一些佈局,例如layout1.xml,layout2.xml等。根據這些佈局中右側的左側發生什麼情況應該顯示。我發現http://developer.android.com/guide/components/fragments.html#Transactions,但我不確定這是否正確。如果不是什麼將是正確的方式?如果這是我奮鬥的一點點Android:更改layout.xml中的layout.xml

transaction.replace(R.id.fragment_container, newFragment); 

我需要告訴newFragment它現在有例如layout27.xml。我怎樣才能做到這一點?

編輯:

我main.xml中看起來像這樣

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


<fragment class="com.whatever.OverviewFragment" 
    android:id="@+id/list" 
    android:name="com.whatever.OverviewFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1" /> 

    <fragment class="com.whatever.DetailFragment" 
    android:id="@+id/listB" 
    android:name="com.whatever.DetailFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1" /> 

</LinearLayout> 

第二個片段應用戶動作來交換,對於數組listB我也可以說5個不同的layout.xml文件。

DetailFragment.java基本上是這樣的:

public class DetailFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.details, container, false); 
    } 

    //this is called when I do an action in the other fragment 
    public void setScreen(int id) { 
     //This fragment is one of the 5 possible fragments 
     DetailFragment2 newF = new DetailFragment2(); 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     transaction.replace(R.id.listB, newF); 
     transaction.addToBackStack(null); 
     transaction.commit(); 
    } 
} 

回答

-1

所以你可以做的是使用該片段事務管理和myabe某種事件(讓我們假設一個按鈕單擊事件),你改變你的方式希望片段看起來。

對於我的代碼我有一個標籤點擊哪一個新的片段被加載,所以我做的是我用新的替換舊的片段。

 RSSFragment rssfrag = new RSSFragment(); 
     FragmentManager fmi = getSupportFragmentManager(); 
     FragmentTransaction ftu = fmi.beginTransaction(); 
     ftu.replace(R.id.frame_fragment, rssfrag).addToBackStack(null).commit(); 

RSSFragment是一個類,我正在調用,然後使用FragmentManager和FragmentTransaction來替換片段。 所以,你可以擡高了無論你想

+0

但是你如何告訴你的rssfrag它鏈接到了layout27.xml,你需要將這個對象與佈局鏈接起來。我沒有看到你的代碼。 – AndyAndroid 2012-07-26 18:01:55

+0

以我RSSFragment類我有我與一個特定的XML這樣它充氣一個OncreateView()方法: 公共視圖onCreateView(LayoutInflater充氣,ViewGroup中容器, \t \t \t捆綁savedInstanceState){ \t \t視圖V =充氣.inflate(R.layout.about_fragment,container,false); – Android2390 2012-07-26 18:10:55

+0

我有一個活動顯示兩個fragements。在fragment2的代碼中,我說然後基本上用一個新的片段替換我自己(fragment2)。聽起來奇怪。我試過了:兩種佈局都高於對方......所以越來越接近但並不是真的我想要的...... – AndyAndroid 2012-07-27 11:50:20

3

我使用的片段參數類似的東西傳遞到選擇哪種佈局的任何片段

片段1(控制)

Bundle data = new Bundle(); 
data.putInt("LayoutChoice",i); // i chooses which layout to use on fragment 2 
Fragment f = new Fragment2(); 
f.setArguments(data); 
fragmentTransaction.replace(R.id.fcontainer, f); 

片段2(顯示)

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    switch(getArguments().getInt("LayoutChoice")) { 
    case 1: 
     rootView = inflater.inflate(R.layout.layout1, container, false); 
     break; 
    case 2: 
     rootView = inflater.inflate(R.layout.layout2, container, false); 
     break; 
    } 
相關問題