如何在Project中的Activity和Library中的Fragment之间传递一个简单的Object

时间:2013-05-09 09:34:47

标签: android casting bundle fragment

我有一个使用标签的项目活动(MainActivity),每个标签都会启动一个片段(MyFragment)。这些片段未在项目中实现,而是在引用的库项目中实现。

所以我想将一个简单的对象从Activity传递给片段:

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因此无法转换为它。

1 个答案:

答案 0 :(得分:0)

如果我没有误解,你仍然可以控制库代码,即使它是一个单独的项目。如果是这样,这听起来像构造函数注入的教科书用例:在库中,为片段创建一个构造函数,该构造函数接受相关对象作为参数,使您能够调用

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

如果你控制库代码,那么库必须具有一些与对象一起提供的功能。