Java 在活动的AsyncTask完成时调用片段方法
我有一个带有导航抽屉活动的应用程序,它正在调用其中的一些片段 其中一个,我有一个谷歌地图集成,从SharedReferences检索,我显示一些标记和东西 在活动中,我有一个异步任务,在单击操作栏按钮时更新数据。它将新数据放入SharedReferences中 我很难找到从FragmentMap调用paintmap()方法的方法,该方法获取SharedReferences数据并使用新标记绘制地图,等等 我尝试了共享首选项ChangeListener,但没有结果 还尝试使用findFragmentByTag获取实际片段,但我无法调用该方法 那么,告诉片段数据已经更新并且需要重新绘制地图的更好方法是什么? 提前谢谢 编辑1:我尝试过的一些东西:Java 在活动的AsyncTask完成时调用片段方法,java,android,google-maps,android-fragments,android-asynctask,Java,Android,Google Maps,Android Fragments,Android Asynctask,我有一个带有导航抽屉活动的应用程序,它正在调用其中的一些片段 其中一个,我有一个谷歌地图集成,从SharedReferences检索,我显示一些标记和东西 在活动中,我有一个异步任务,在单击操作栏按钮时更新数据。它将新数据放入SharedReferences中 我很难找到从FragmentMap调用paintmap()方法的方法,该方法获取SharedReferences数据并使用新标记绘制地图,等等 我尝试了共享首选项ChangeListener,但没有结果 还尝试使用findFragment
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_map, container, false);
txtUpdateInfo = (TextView) view.findViewById(R.id.last_update_info);
initilizeMap(); // This one includes paintMap at the end. It creates the map.
Check this pastebin for more: http://pastebin.com/DPPB7FiK
SharedPreferences.OnSharedPreferenceChangeListener spChanged = new SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(
SharedPreferences sharedPreferences, String key) {
paintMap();
}
};
return view;
}
还尝试在MainActivity AsyncTask的postExecute上检索片段:
FragmentManager fm = getFragmentManager();
Fragment f = fm.findFragmentByTag("MAP");
f.paintMap(); // This gives me error and I cannot compile
此外,在同一地点:
FragmentMap f = new FragmentMap();
f.paintMap();
最后一个编译了,但给了我指向片段上所有内容的空指针。。。也不工作。此代码的问题
FragmentManager fm = getFragmentManager();
Fragment f = fm.findFragmentByTag("MAP");
f.paintMap(); // This gives me error and I cannot compile
…是因为您已将f声明为片段
,而Android片段
类没有名为paintMap()
的方法。您需要将其声明为FragmentMap
,并按如下方式转换findFragmentByTag
的返回值
FragmentManager fm = getFragmentManager();
FragmentMap f = (FragmentMap) fm.findFragmentByTag("MAP");
f.paintMap();
调用f.paintMap()
应该可以正常工作
此外(供参考)以下内容永远不会起作用
FragmentMap f = new FragmentMap();
f.paintMap();
原因是,与
活动一样,片段
也有一个生命周期,这意味着在片段事务
中使用它之前,它没有完全初始化,并经历了它的生命周期方法,如onatach
,onCreateView
,onResume
等“…我无法调用该方法。“:为什么不呢?片段
中的任何public
方法都可以直接从父活动
调用。您是否尝试过使用AsyncTask的onPostExecute方法调用刷新功能?显示您尝试了哪些方法,并使用一些信息对文章进行了初始化。方法是公共的,并尝试在片段中创建一个名为updateFragment的新公共方法,从中调用paintMap,但没有成功。