2011-06-25 27 views
0

事情是我創建一個蜂窩應用程序,我不能在片段之間切換。這是我的主要代碼:listview和fragments

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    list = (ListView)findViewById(R.id.list); 
    A = new FragmentA(); 
    B = new FragmentB(); 
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items); 
    list.setAdapter(adapter); 
    list.setOnItemClickListener(mylistener); 
} 

public void changeFragment(Fragment f){ 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.fragment, f); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

    public OnItemClickListener mylistener = new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     switch(position){ 
     case 0 : changeFragment(A); 
      break; 
     case 1 : changeFragment(B); 
      break; 
     } 

    } 
}; 

我才知道我把「替換」我不得不刪除,但我怎麼能去掉一個我已經在? 什麼告訴我在日誌中: 指定的孩子已經有一個父母。您必須先調用子對象的父對象的removeView()。

+0

您能否澄清在選擇列表中的第一個條目時顯示的fragmentA IS?如果是這樣,當你選擇列表中的第二個條目時會發生什麼?我不太理解你的評論,「我怎麼能刪除我已經在?」的評論。 – PJL

+0

現在我是FragmentA,點擊「one」會打開/重新打開fragmentA,「two」會打開fragmentB,我只想通過點擊列表中的項目從FragmentA傳遞到FragmentB。 – Tsunaze

+0

查看API演示FragmentLayout示例,因爲它的操作與我想要的相似。首先添加一些保護,所以當你點擊相同的列表條目時,你不會重新加載同一個片段。其次要小心維護引用,請參閱[鏈接](http://stackoverflow.com/questions/6250580/fragment-already-added-illegalstateexception) – PJL

回答

1

查看API演示FragmentLayout示例,因爲它可以執行類似於我想要的操作。按照示例演示的方式,調用replace加載第一個片段沒有任何問題。

首先添加一些保護,因此當您單擊相同的列表條目時,您不會重新加載相同的片段。

其次,在保持對片段的引用時要小心,請參閱link。您可能需要每次重新創建片段,或者使用removeadd而不是replace

0

問題不在於刪除片段。 replace方法刪除現有的。

我想問題是訪問偵聽器內部的片段。嘗試在偵聽器本身內創建一個新的片段。請發佈完整的代碼。

+0

這是我的完整代碼。你想讓我發佈FragmentA,FragmentB和所有的XML嗎? – Tsunaze

+0

訪問監聽器中的片段沒有問題。 – PJL