从主机调用片段的方法活动
我有一个宿主活动和一个片段。在这个片段中,我有一个更新方法,它从数据库加载AsyncTask中的一些数据并更新GridView。从主机调用片段的方法活动
当我打电话从主机活动这种方法有时我得到一个NullPointerExeption,我不知道为什么...
下面是活动的方法,它是一个接口:
@Override
public void onDataSetChange() {
((CalendarFragment) getSupportFragmentManager().findFragmentByTag(Constants.FRAGMENT_CALENDAR_TAG)).updateGridView();
}
而且该片段的更新方法:
public void updateGridView() {
// Loading the new updated data
mLoadingTask = new LoadingDataTask();
mLoadingTask.execute((Void) null);
}
这里是在logcat的例外:
04-17 12:05:28.366:E/AndroidRuntime(17789):致命例外:main 04-17 12:05:28.366:E/AndroidRuntime(17789):java.lang.NullPointerException 04-17 12:05:28.366:E/AndroidRuntime(17789):at com.sk.neverforget.MainActivity.onDataSetChange(MainActivity.java:397) 04-17 12:05:28.366:E/AndroidRuntime(17789):at com。 sk.neverforget.fragments.DiaryFragment $ StoringDataTask.onPostExecute(DiaryFragment.java:543) 04-17 12:05:28.366:E/AndroidRuntime(17789):at com.sk.neverforget.fragments.DiaryFragment $ StoringDataTask.onPostExecute( DiaryFragment.java:1) 04-17 12:05:28.366:E/AndroidRuntime(17789):at android.os.AsyncTask.finish(AsyncTask.java:631) 04-17 12:05:28.366:E/AndroidRuntime(17789):在android.os.AsyncTask.access $ 6 00(AsyncTask.java:177) 04-17 12:05:28.366:E/AndroidRuntime(17789):at android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644) 04-17 12:05: 28.366:E/AndroidRuntime(17789):at android.os.Handler.dispatchMessage(Handler.java:99) 04-17 12:05:28.366:E/AndroidRuntime(17789):at android.os.Looper.loop( Looper.java:137) 04-17 12:05:28.366:E/AndroidRuntime(17789):at android.app.ActivityThread.main(ActivityThread.java:5039) 04-17 12:05:28.366:E/AndroidRuntime(17789):在java.lang.reflect.Method.invokeNative(本地方法) 04-17 12:05:28.366:E/AndroidRuntime(17789):在java.lang.reflect.Method.invoke(Method.java :511) 04-17 12:05:28.366:E/AndroidRuntime(17789):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 04-17 12:05:28.366:E/AndroidRuntime(17789):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 04-17 12:05:28.366:E/AndroidRuntime 17789):at dalvik.system.NativeStart.main(Native Method)
在调用updateGridView之前,建议检查CalendarFragment为null。您何时添加此片段尚不清楚。它可能还没有添加,或者已经被删除。
@Override
public void onDataSetChange() {
CalendarFragment fragment = ((CalendarFragment)getSupportFragmentManager().findFragmentByTag(Constants.FRAGMENT_CALENDAR_TAG));
if(fragment != null) fragment.updateGridView();
}
我找到的解决方案是不是标签来从片段经理的片段,但使用保存片段中的局部变量,并从那里调用该方法。
我想我和你有同样的问题。当你说你通过访问“局部变量”中的片段来使你的代码工作时,你是什么意思?你可以发布你的代码来访问片段的局部变量中的片段及其方法吗?谢谢! – Natalie
我的猜测是findfragmentbytag返回null,请在运行该方法之前尝试将您的片段赋值给变量,然后调试以查看片段是否为null,如果是的话,找出它为什么为null。 – ePeace
奇怪。这个标签位于一个名为Constants的独立静态类中并被设置。但我会尝试你的建议。 – Seishin
请发送异常的logcat。 – Egor