当我尝试从我已经添加并提交到我的活动的片段中获取SupportMapFragment时,我有时会得到一个NPE。例如,如果我的代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
if (savedInstanceState == null) {
fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().add(R.id.content_frame, fragmentMapa).commit();
fragmentManager.executePendingTransactions();
}
... //non-related code...
setMapFragment();
}
setMapFragment(){
mapa = ((SupportMapFragment) fragmentManager.findFragmentById(R.id.map)).getMap();
}
我在mapa
代码行中获得了一个NPE。这是奇怪的原因,如果我将mapa = ((SupportMapFragment) fragmentManager...
行移动到asyncTask的onPostExecute()
方法(花费1或2秒)它正常工作,所以我认为事务执行需要几秒钟。这就是我使用executePendingTransactions()
但看起来没有做任何事情的原因。
如果交易尚未完成,我应该如何处理碎片以避免此NPE?
答案 0 :(得分:0)
您应该在打开的Fragment上设置MapFragment。致电
getActivity().getSupportFragmentManager();
从片段中访问片段管理器,也可以
setMapFragment(){
mapa = ((SupportMapFragment) yourFragmentView.findFragmentById(R.id.map)).getMap();
}