2013-05-09 22 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

相关问题