【发布时间】:2015-09-08 19:41:31
【问题描述】:
我需要从父活动更新片段,但我不断收到null pointer exception 并且片段已经在屏幕上。
有人知道我该怎么做吗?
这是我展示片段的方式:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.abc_slide_in_bottom, R.anim.abc_slide_out_top, R.anim.abc_slide_in_top, R.anim.abc_slide_out_bottom);
loginFragment = new LoginFragment();
Bundle b = new Bundle();
b.putSerializable(IntentConstants.OPERATORS, supportedCarriers);
b.putString(IntentConstants.OPERATOR_NAME, carrierName);
b.putBoolean(IntentConstants.OPERATOR_SUPPORTED, carrierIsSupported);
loginFragment.setArguments(b);
ft.replace(R.id.welcome_fragment_container, loginFragment);
ft.commit();
然后我通过执行以下操作从父活动调用片段方法:
runOnUiThread(new Runnable() {
@Override
public void run() {
loginFragment.setLoginFailed();
}
});
但是当这样做时,应用程序崩溃了,我在 logCat 中得到了这个:
java.lang.NullPointerException
at com.app.activities.WelcomeActivity$6$1.run(WelcomeActivity.java:285)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
显示更多来自
WelcomeActivity类的代码 -
最简单的方法是将 setLoginFailed() 方法设为静态
-
@ρяσѕρєяK 我从 socketIO 方法调用
setLoginFailed()。也许这会改变一些事情?这也有区别:我从子片段调用showLoginFragment(),以便可以用 LoginFragment 替换它?
标签: android android-fragments android-fragmentactivity