Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在活动的AsyncTask完成时调用片段方法_Java_Android_Google Maps_Android Fragments_Android Asynctask - Fatal编程技术网

Java 在活动的AsyncTask完成时调用片段方法

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

我有一个带有导航抽屉活动的应用程序,它正在调用其中的一些片段

其中一个,我有一个谷歌地图集成,从SharedReferences检索,我显示一些标记和东西

在活动中,我有一个异步任务,在单击操作栏按钮时更新数据。它将新数据放入SharedReferences中

我很难找到从FragmentMap调用paintmap()方法的方法,该方法获取SharedReferences数据并使用新标记绘制地图,等等

我尝试了共享首选项ChangeListener,但没有结果

还尝试使用findFragmentByTag获取实际片段,但我无法调用该方法

那么,告诉片段数据已经更新并且需要重新绘制地图的更好方法是什么?

提前谢谢

编辑1:我尝试过的一些东西:

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,但没有成功。