Gal*_*aim 24 android android-fragments google-maps-android-api-2
我正在使用Google Maps API V2进行活动,其中下拉导航地图位于第二个位置.
我正在实际添加地图,如:
mMapFragment = supportMapFragment.newInstance();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.placeHolder, mMapFragment, TAG_MAP)
.commit();
Run Code Online (Sandbox Code Playgroud)
我想获取GoogleMap ovject,因为文档https://developers.google.com/maps/documentation/android/map说它应该完成mMapFragment.getMap()
,但它返回null.
根据http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html ,如果Fragment尚未通过onCreateView生命周期事件,则返回null.
片段何时准备好怎么知道?
编辑:我发现这个如何知道在使用SupportMapFragment时地图已经准备就绪?
覆盖onActivityCreated似乎是一个解决方案,但是我必须通过构造函数而不是newInstance()实例化片段,它有什么区别吗?
Kir*_*irk 41
我首选的方法是使用回调从a获取信号Fragment
.此外,这是Android在与活动进行通信时提出的推荐方法
对于您的示例,在您的Fragment
添加界面并注册它.
public static interface OnCompleteListener {
public abstract void onComplete();
}
private OnCompleteListener mListener;
public void onAttach(Context context) {
super.onAttach(context);
try {
this.mListener = (OnCompleteListener)context;
}
catch (final ClassCastException e) {
throw new ClassCastException(context.toString() + " must implement OnCompleteListener");
}
}
Run Code Online (Sandbox Code Playgroud)
现在在你的实现这个接口Activity
public class MyActivity extends FragmentActivity implements MyFragment.OnCompleteListener {
//...
public void onComplete() {
// After the fragment completes, it calls this callback.
// setup the rest of your layout now
mMapFragment.getMap()
}
}
Run Code Online (Sandbox Code Playgroud)
现在,无论你的Fragment
是什么意味着它已经加载,通知你Activity
已经准备好了.
@Override
protected void onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// create your fragment
//...
// signal that you're done and tell the Actvity to call getMap()
mListener.onComplete();
}
Run Code Online (Sandbox Code Playgroud)
编辑 2017-12-05 onAttach(活动活动)已弃用,请改用onAttach(Context context).以上代码已调整.