2013-05-09 20 views
0

我有一個使用選項卡的項目活動(MainActivity),每個選項卡啓動一個片段(MyFragment)。這些片段沒有在項目中實現,而是在引用的庫項目中實現。如何在項目中的活動和庫中的片段之間傳遞簡單的對象

所以我想從活動的片段通過一個簡單的對象:

private MySimpleClass myObject = new MySimpleClass(); 

public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) { 
    static final String KEY = "simpleObject"; 
    final ActionBar actionBar = getActionBar(); 
    Bundle args = new Bundle(); 
    switch(tab.getPosition()) { 
    case 0: 
     fragment = new MyFragment(); 
     args.put??????(KEY, myObject); 
     fragment.setArguments(args); 
     fragmentTransaction.add(R.id.fragmentContent, fragment, "tab0_tag"); 
     break; 
     . . . 

    } 
} 

如果Fragment不會是在圖書館,我會繞過Bundle機制,只需使用一個本地方法:

m = ((MainActivity)getActivity()).getMyObject(); 

但這並不從庫中的代碼片段工作,因爲它不承認MainActivity,因此不能投給它。

回答

0

如果我沒有誤解,即使它是一個單獨的項目,您仍然控制着庫代碼。如果是這樣,這聽起來像教科書使用情況構造器注入:在庫中,創建一個接受對象問題作爲參數片段的構造,使您可以撥打

fragment = new MyFragment(myObject); // <-- HERE 
fragmentTransaction.add(R.id.fragmentContent, fragment, "tab0_tag"); 

如果控制庫代碼,那麼庫必須具有與該對象一起提供的一些功能。

+0

我也在控制圖書館項目。我嘗試了你的建議,但它沒有編譯,出現以下錯誤(儘管它讀作警告是一個錯誤)'避免片段中的非默認構造函數:使用默認的構造函數加上Fragment#setArguments(Bundle)而不是' – ilomambo 2013-05-09 18:58:11

+0

雖然在project-> clean之後,錯誤/警告消失了!偉大的建議! – ilomambo 2013-05-09 19:01:29

+0

嗯,是的,這可能不是一個好主意畢竟:http://stackoverflow.com/questions/9245408/best-practice-for-instantiating-a-new-android-fragment – balpha 2013-05-10 09:20:36

相關問題