0

我有一个使用选项卡的项目活动(MainActivity),每个选项卡都会启动一个片段(MyFragment)。片段没有在项目中实现,而是在引用的库项目中实现。

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

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

4

1 回答 1

0

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

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

如果您无法控制库代码,则库必须具有与对象一起提供的某些功能。

于 2013-05-09T09:56:22.700 回答