Android java.lang.IllegalStateException:活动已被销毁

Android java.lang.IllegalStateException:活动已被销毁,android,robolectric,Android,Robolectric,与Robolectric合作,我对android非常陌生。我使用活动制作了第一个测试类。它工作得很好。 现在我想做一个碎片测试 @RunWith(RobolectricTestRunner.class) public class LoginFragmentTest { private LoginFragment fragment; @Before public void setup() { fragment = new LoginFragment();

与Robolectric合作,我对android非常陌生。我使用活动制作了第一个测试类。它工作得很好。 现在我想做一个碎片测试

@RunWith(RobolectricTestRunner.class)
public class LoginFragmentTest {
    private LoginFragment fragment;

    @Before
    public void setup() {
        fragment = new LoginFragment();
        startFragment(fragment);
        assertThat(fragment, notNullValue());
        assertThat(fragment.getActivity(), notNullValue());
    }

    private void startFragment(LoginFragment fragment) {
        FragmentManager fragmentManager = new FragmentActivity().getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(fragment, null);
        fragmentTransaction.commit();
    }

    @Test
    public void login() {
        EditText idEditText = (EditText)fragment.getActivity().findViewById(R.id.main_id);
        assertThat(idEditText, notNullValue());
    }
}
这是我对Fragment类的第一个测试类。它抛出

"java.lang.IllegalStateException: Activity has been destroyed" in startFragment#fragmentTransaction.commit().
有人知道怎么解决这个问题吗

您可以从中找到完整的源代码


提前谢谢

片段应该显示在活动中。流程应为:

  • 在FragmentActivity类中分配新的片段对象
  • 获取片段管理器以添加新分配的片段
在您的情况下,您与实际活动没有联系。您可以使用new FragmentActivity()分配FragmentActivity,并尝试获取支持管理器。在编译过程中,没有“真正的”活动能够管理您的片段。可以在已经显示的活动上添加片段,但在这里情况并非如此

我建议阅读本页,因为它很好地解释了这些事情:

这是工作版本。以下三行很重要(来自robolectric source-DialogFragmentTest)


具体来说,我的问题是创建活动的时候。 我在用

 activity = Robolectric.buildActivity(MyActivity.class).get();
应该是这样

 activity = Robolectric.buildActivity(MyActivity.class).create().get();

希望它能帮助某人:D

当我使用fragmentTransaction.commitAllowingStateLoss()时发生的事情;来自其父片段具有setRetainInstance(true)的子片段;我将活动作为属性,这导致在轮换时活动泄漏。

哼哼,在提交碎片事务之前不要破坏您的活动?谢谢!!我成功地将活动连接到片段。在机器人分子的上下文中,“真实”活动意味着什么@백명석 您是如何将片段连接到活动的?我遇到了类似的问题。
 activity = Robolectric.buildActivity(MyActivity.class).get();
 activity = Robolectric.buildActivity(MyActivity.class).create().get();