我通过以下方式传递来自其他活动的意图:
Intent intent = new Intent(getActivity(), MyActivity.class);
intent.putExtra("type, "email);
startActivity(intent);
在我的片段中,我有:
Intent intent = getActivity().getIntent();
String viewType = intent.getStringExtra("type);
在Robolectric 3.3中,我通过以下方式设置我的活动和片段:
mMyActivity = Robolectric.setupActivity(mMyActivity.class);
mMyFragment = new mMyFragment();
SupportFragmentTestUtil.startVisibleFragment(mMyFragment);
如何将意图发送到MyActivity
类,以便片段可以正确调用getActivity().getIntent().getStringExtra("type");
?
答案 0 :(得分:0)
你可以这样做:
Intent intent = new Intent(getActivity(), MyActivity.class);
intent.putExtra("type, "email);
Robolectric.buildActivity(MainActivity.class, intent).create().start().resume()
答案 1 :(得分:0)
对于仍然想要解决这个问题的每个人,我找到了一个解决方案:
在浏览Roboelectric的源代码后,您可以看到这些是相关的方法:
public class SupportFragmentTestUtil {
public static void startVisibleFragment(Fragment fragment) {
buildSupportFragmentManager(FragmentUtilActivity.class)
.beginTransaction().add(1, fragment, null).commit();
}
private static FragmentManager buildSupportFragmentManager(Class < ? extends FragmentActivity > fragmentActivityClass) {
FragmentActivity activity = Robolectric.setupActivity(fragmentActivityClass);
return activity.getSupportFragmentManager();
}
}
public class Robolectric {
public static < T extends Activity > T setupActivity(Class < T > activityClass) {
return buildActivity(activityClass).setup().get();
}
}
所以我们可以使用Intent做同样的事情:
MyFragment myFragment = new MyFragment()
Intent intent = new Intent(
ShadowApplication.getInstance().applicationContext,
MyActivity::class.java
)
intent.putExtra("type", "email")
MyActivity activity = Robolectric.buildActivity(MyActivity.class, intent).setup().get()
activity.getSupportFragmentManager.beginTransaction().add(1, myFragment, null).commit()
它为我工作(甚至在Kotlin)
此外,我将打开一个Pull Request来添加一个方法,允许启动具有特定意图的片段,以查看它是否被添加到Roboelectric的下一个版本中。