从主机Activity调用Fragment的方法

时间:2013-04-17 11:55:06

标签: android methods nullpointerexception

我有一个主持人活动和一个片段。在这个片段中,我有一个更新方法,它从数据库中加载AsyncTask中的一些数据并更新GridView。

当我从主机活动中调用此方法时,有时会得到一个NullPointerExeption,我不知道为什么...

这是Activity的方法,它是一个接口:

@Override
public void onDataSetChange() {

    ((CalendarFragment) getSupportFragmentManager().findFragmentByTag(Constants.FRAGMENT_CALENDAR_TAG)).updateGridView();
}

Fragment的更新方法:

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):致命异常:主要   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):在android.os.AsyncTask.finish(AsyncTask.java:631)   04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)   04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644)   04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.Handler.dispatchMessage(Handler.java:99)   04-17 12:05:28.366:E / AndroidRuntime(17789):在android.os.Looper.loop(Looper.java:137)   04-17 12:05:28.366:E / AndroidRuntime(17789):在android.app.ActivityThread.main(ActivityThread.java:5039)   04-17 12:05:28.366:E / AndroidRuntime(17789):at java.lang.reflect.Method.invokeNative(Native Method)   04-17 12:05:28.366:E / AndroidRuntime(17789):at 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)

2 个答案:

答案 0 :(得分:0)

在调用updateGridView之前,建议您检查CalendarFragment是否为null。添加此片段时尚不清楚。它可能尚未添加或已被删除。

@Override
public void onDataSetChange() {

CalendarFragment fragment =  ((CalendarFragment)getSupportFragmentManager().findFragmentByTag(Constants.FRAGMENT_CALENDAR_TAG));
if(fragment != null) fragment.updateGridView();
}

答案 1 :(得分:0)

我发现的解决方案不是通过标签从片段管理器获取片段,而是使用保存片段的局部变量并从那里调用该方法。