2014-01-28 62 views
1

更改內部活動中的片段我有這個活動,它首先顯示一個帶有元素列表的片段。這與此代碼工作完美:通過onListItemClick()

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_act); 

    if(null == savedInstanceState) 
    { 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     ListFragment glfragment = new ListFragment(); 
     fragmentTransaction.add(R.id.listfrag1, glfragment); 
     fragmentTransaction.commit(); 
    } 

} 

嗯,我有一個ListFragmentDetailFragment。但是當我點擊列表中的某個元素時,我不知道如何進行轉換。我知道fragmentTransaction.replace(),但我不知道什麼時候可以打電話給他。

我想我應該用OnListItemClick()ListFragment裏面,但我不知道如何使用FragmentManager的片段內,而不是在主要活動......此外,我要「出口」的一些數據給DetailFragment就好像它是一個意圖,但事實並非如此。

回答

2

要在您的片段中使用片段管理器,只需撥打 getActivity().getFragmentManager()而不是getFragmentManager()。在OnItemClickListener中實施此項應該就足夠了。

+0

我想這 @Override \t公共無效onListItemClick(ListView的升,視圖V,INT位置,長ID) \t { \t \t FragmentManager FM = getActivity()getFragmentManager(); \t \t FragmentTransaction ft = fm.beginTransaction(); \t \t DetailFragment df = new DetailFragment(); \t \t ft.replace(R.id.listfrag1,df); \t \t ft.commit(); \t}但它沒有工作... – fcasanova

+0

好吧,我的問題是,我的DetailFragment是一個ListFragment ... facepalm對我來說。有效! – fcasanova

1

我會做的是:

  • 與定義一個接口與一個方法listItemSelected()作爲參數選定項目
  • 的標識讓您的活動實現這個接口
  • 在的onAttach你列表片段,採取行動,並保持它作爲一個成員變量,轉換爲接口類型。確保在onDetach中取消引用。
  • 在你onListItemClick,請致電您的活動
  • 這種方法在活動中,你現在可以做一個新的fragmenttransaction,這時候就需要更換,而不是添加片段
  • 以正確的創建細節片段參數(id),使用描述的方法here

這應該正常工作。

+0

謝謝!我會試試這個。 – fcasanova