我有一个使用标签的项目活动(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
因此无法转换为它。
答案 0 :(得分:0)
如果我没有误解,你仍然可以控制库代码,即使它是一个单独的项目。如果是这样,这听起来像构造函数注入的教科书用例:在库中,为片段创建一个构造函数,该构造函数接受相关对象作为参数,使您能够调用
fragment = new MyFragment(myObject); // <-- HERE
fragmentTransaction.add(R.id.fragmentContent, fragment, "tab0_tag");
如果你不控制库代码,那么库必须具有一些与对象一起提供的功能。