我已阅读已经相关的问题,但我无法找到问题的答案。
应用结构
我们的MainActivity
是FragmentTabHost
,因此它包含片段。我想展示的其中一个片段里面有另一个片段 - SupportMapFragment
。
我们有第二项活动LoginActivity
。
问题
在浏览片段时,回到我的MyMapFragment
没有问题。但是,当我打开LoginActivity
并关闭它时,我得到一个空指针异常。 NPE就在这条线上
googleMap = fragment.getMap();
,实际上为null的是fragment
。
我不明白的是,它怎么能找到它的第一个"它加载的时间,但第二次找不到它?
我知道getMap()
已被删除,但事实并非如此。我无法获得fragment
对象。
我尝试使用getMapAsync()
,但它也无法正常工作。我第一次接到onMapReady()
的电话,但如果您切换回LoginActivity
,则永远不会返回onMapReady()
回调。
我的问题是:我如何"重置" SupportMapFragment
是为了在我拨打findFragmentById
时获取它?
这是MyMapFragment
public class MyMapFragment extends Fragment
{
GoogleMap googleMap;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (_view != null)
{
ViewGroup parent = (ViewGroup) _view.getParent();
if (parent != null)
{
parent.removeView(_view);
}
}
else
{
try
{
_view = inflater.inflate(R.layout.mymapfragment, container, false);
}
catch (InflateException e)
{
e.printStackTrace();
}
}
SupportMapFragment fragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map_fragment);
googleMap = fragment.getMap(); // fragment is null after going to another activity
}
}
map_fragment.xml
<FrameLayout
android:id="@+id/main"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map_fragment"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!-- some other stuff -->
</FrameLayout>