我对Google Maps有问题,即getSupportFragmentManager()。findFragmentById始终返回null。您有解决方法的想法吗?

这是代码:

fragment_map.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.myapp.something.MapFragment">
<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />
</FrameLayout>

MapsFragment.java:
public class MapFragment extends Fragment implements OnMapReadyCallback, android.location.LocationListener

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    SupportMapFragment mapFragment = (SupportMapFragment) this.getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
...

我在“Activity ”中使用了Google map ,它可以与以下代码一起使用:
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);

我试图在 fragment 中重用它,因为我需要在 fragment 中而不是在 Activity 中使用 map ,但是它不起作用。

我试过了:
  • 在“onCreateView”函数
  • 中调用此代码
  • SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
  • GoogleMap mGoogleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();已过时,应用程序崩溃
  • SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);和类似的变体,但在所有情况下,mapFragment都为空。

  • 您知道我该怎么解决吗?

    最佳答案

    问题是您正在尝试使用 Activity 的FragmentManager,而您应该使用Fragment的子FragmentManager。

    删除 fragment 中的onCreate()覆盖,并在您为布局充气的位置添加onCreateView()覆盖并调用getMapAsync():

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
    
        View rootView = inflater.inflate(R.layout.fragment_map, container, false);
    
        SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
    
        mapFragment.getMapAsync(this);
    
        return rootView;
    }
    

    关于android - getSupportFragmentManager()。findFragmentById对于Android fragment 中的Google map 返回null?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38404814/

    10-09 10:17