JJ *_*Liu 11 android unit-testing nullpointerexception android-fragments android-testing
当我添加自定义转换时,OnBackPressed()测试会抛出NPE .没有自定义过渡就没问题.为什么?
这个NPE只能在单元测试中发生,而不是应用程序.
class MyActivity {
@Override
public void onBackPressed() {
.......
super.onBackPressed();
}
private void putFragment(Fragment fragment) {
String tag = fragment.getClass().getName();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
// TEST FAILED IF I ADD THE FOLLOWING LINE
transaction.setCustomAnimations(
R.anim.slide_in_left_fade_in,
R.anim.fade_out_short_anim_time,
R.anim.fade_in_short_anim_time,
R.anim.slide_out_right_fade_out);
transaction.replace(R.id.ub__add_profiles_content, fragment, tag);
transaction.addToBackStack(tag);
transaction.commit();
}
}
class MyActivityTest extends RiderRobolectricBase {
@Test
public void onBackPressed() {
putFragment(someFragment);
mMyActivity.onBackPressed();
}
}
Run Code Online (Sandbox Code Playgroud)
例外:
java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1304)
at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:909)
at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1625)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:561)
at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:166)
at MyActivity.onBackPressed(MyActivity.java:28)
Run Code Online (Sandbox Code Playgroud)
小智 1
Onbackpress,您将从后退堆栈中反转之前的步骤。第一个是删除现有的片段。该片段已与活动分离,并且
您不会保留该片段的实例。
java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.FragmentManagerImpl.removeFragment(FragmentManager.java:1304)
at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:909)
at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1625)
at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:561)
at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:166)
at MyActivity.onBackPressed(MyActivity.java:28)
Run Code Online (Sandbox Code Playgroud)
你接电话putFragment(someFragment)
。
所以当你去调用setCustomAnimations时。前一个视图不会保存以供在转换中使用。
// TEST FAILED IF I ADD THE FOLLOWING LINE
transaction.setCustomAnimations(
R.anim.slide_in_left_fade_in,
R.anim.fade_out_short_anim_time,
R.anim.fade_in_short_anim_time,
R.anim.slide_out_right_fade_out);
Run Code Online (Sandbox Code Playgroud)
您可以在片段的 oncreate 方法中保留该实例:
setRetainInstance(true);
Run Code Online (Sandbox Code Playgroud)
至于这在您的应用程序中的工作,我看不到您的 Activity 的 onBackPressed 事件中的代码。
归档时间: |
|
查看次数: |
156 次 |
最近记录: |