Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何通过机器人分子将意图传递给碎片_Android_Unit Testing_Robolectric - Fatal编程技术网

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()