Activity.FragmentManager 已经过时。

4

我正在使用Fragment开发谷歌地图,API版本为23。

mapFragment = FragmentManager.FindFragmentById<MapFragment>(Resource.Id.mapFragment);

上述代码被标记为已过时。

AXML文件

<fragment 
        android:layout_width="match_parent"
        android:layout_height="200dp" 
        class="com.google.android.gms.maps.MapFragment"
        android:id="@+id/mapFragment"/>

有没有其他实现方式的想法?


你最好阅读Android FragmentManager文档 - Jon Douglas
请看这里:xamarin-android-app-dialogfragment-obsolete - nevermore
2个回答

12

简单来说,Android最近将所有旧的Fragment类及其其他支持类标记为过时。

现在建议您使用支持库中的Fragment、FragmentManager。

在Xamarin中如何实现呢?

将您的Fragment类继承自android.support.v4.app.Fragment而不是android.app.Fragment

使用SupportFragmentManager代替FragmentManager,这在这个Java指南中有详细说明。


1
将您的AXML更改为:

<fragment 
    android:layout_width="match_parent"
    android:layout_height="200dp" 
    class="com.google.android.gms.maps.SupportMapFragment"
    android:id="@+id/mapFragment"/>

和您的代码一起:

SupportMapFragment _mapFragment = (SupportMapFragment)SupportFragmentManager.FindFragmentByTag("mapFragment");
            if (_mapFragment == null)
            {
                GoogleMapOptions mapOptions = new GoogleMapOptions()
                    .InvokeRotateGesturesEnabled(true)
                    .InvokeScrollGesturesEnabled(true)
                    .InvokeCompassEnabled(true)
                    .InvokeAmbientEnabled(true)
                    .InvokeMapType(GoogleMap.MapTypeNormal)
                    .InvokeZoomControlsEnabled(true)
                    .InvokeCompassEnabled(true);

                _mapFragment = SupportMapFragment.NewInstance(mapOptions);

                Android.Support.V4.App.FragmentTransaction fragTx = SupportFragmentManager.BeginTransaction();
                fragTx.Add(Resource.Id.map, _mapFragment, "map");
                fragTx.Commit();

                _mapFragment.GetMapAsync(this);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接