Android java.lang.IllegalStateException:活动已被销毁
与Robolectric合作,我对android非常陌生。我使用活动制作了第一个测试类。它工作得很好。 现在我想做一个碎片测试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();
@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类中分配新的片段对象
- 获取片段管理器以添加新分配的片段
具体来说,我的问题是创建活动的时候。 我在用
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();