如何使用Robolectric将意图传递给Fragment

3

我正在通过以下方式从另一个活动传递意图:

Intent intent = new Intent(getActivity(), MyActivity.class);
intent.putExtra("type, "email);
startActivity(intent);

在我的Fragment中,我有以下内容:
Intent intent = getActivity().getIntent();
String viewType = intent.getStringExtra("type);

在Robolectric 3.3中,我通过以下方式设置我的Activity和Fragment:
mMyActivity = Robolectric.setupActivity(mMyActivity.class);

mMyFragment = new mMyFragment();
SupportFragmentTestUtil.startVisibleFragment(mMyFragment);

我该如何发送意图到MyActivity类,以便Fragment能够正确调用getActivity().getIntent().getStringExtra("type");


我认为你需要一个影子意图。https://dev59.com/Nm025IYBdhLWcg3wnncw#39674693 - EpicPandaForce
我有完全相同的问题。 - Joao Neto
2个回答

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的下一个版本中。


0
你可以这样做:
Intent intent = new Intent(getActivity(), MyActivity.class);
intent.putExtra("type, "email);
Robolectric.buildActivity(MainActivity.class, intent).create().start().resume()

这会启动一个活动,但在启动片段时,不会使用活动实例。 - Joao Neto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接