Android 如何通过机器人分子将意图传递给碎片
我通过以下方式传递另一项活动的意图:Android 如何通过机器人分子将意图传递给碎片,android,unit-testing,robolectric,Android,Unit Testing,Robolectric,我通过以下方式传递另一项活动的意图: Intent intent = new Intent(getActivity(), MyActivity.class); intent.putExtra("type, "email); startActivity(intent); 在我的片段中,我有: Intent intent = getActivity().getIntent(); String viewType = intent.getStringExtra("type); 在Robolectri
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”)代码>?您可以这样做:
Intent intent = new Intent(getActivity(), MyActivity.class);
intent.putExtra("type, "email);
Robolectric.buildActivity(MainActivity.class, intent).create().start().resume()
对于仍在努力解决这一问题的所有人,我找到了一个解决方案:
浏览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();
}
}
它为我工作(即使在科特林)
此外,我将打开一个Pull请求来添加一个方法,该方法允许启动一个具有特定意图的片段,以查看它是否被添加到Roboelectric的下一个版本中 我想你需要一个影子。我有完全相同的问题。这会启动一个活动,但在启动片段时,不会使用活动实例。
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()