FragmentTransactions空指针异常

时间:2014-06-08 17:56:22

标签: android fragment

当我尝试从我已经添加并提交到我的活动的片段中获取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?

1 个答案:

答案 0 :(得分:0)

您应该在打开的Fragment上设置MapFragment。致电

getActivity().getSupportFragmentManager();

从片段中访问片段管理器,也可以

setMapFragment(){
    mapa = ((SupportMapFragment) yourFragmentView.findFragmentById(R.id.map)).getMap();
}