MainActivity中的Android Map Fragment不会调用onMapReady

时间:2017-05-19 11:38:51

标签: java android google-maps android-fragments

我创建了一个地图FragmentActivity,我想在MainActivity中显示它,所以我可以在活动中有其他元素。

当我运行应用程序时,地图会启动,但它不会触发onMapReady,因此它只是一个基本地图,我无法移动放置标记或以编程方式移动相机。

代码非常基本,我只是将地图放在MainActivity XML中。

 private void move(string dir)
    {
        if(dir=="up"&& pbxBot.Location.Y != 12)
        {
            this.pbxBot.Top = this.pbxBot.Top - 30;

        }
    }

知道它为什么不起作用?

MainActivity代码:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:map="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools"
              android:id="@+id/map"
              android:name="com.google.android.gms.maps.SupportMapFragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:layout_weight="4"
              tools:context="com.crisser.beitnaonline.MapsActivity"/>

MapsActivity代码:

public class MainActivity extends AppCompatActivity implements 
OnMapReadyCallback
{

private FirebaseDatabase firebaseDatabase;
private DatabaseReference firebaseRef;
private GoogleMap mMap;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (AccessToken.getCurrentAccessToken() == null)
    {
        goLoginScreen();
    }

    firebaseDatabase = FirebaseDatabase.getInstance();
    firebaseRef = firebaseDatabase.getReference().child("event");
    firebaseRef.addValueEventListener(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            for (DataSnapshot event : dataSnapshot.getChildren())
            {
                Log.i("event", event.toString());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError)
        {

        }
    });



}

private void goLoginScreen()
{
    Intent intent = new Intent(this, LoginActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
    Intent.FLAG_ACTIVITY_CLEAR_TASK | 
            Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
}

public void logout(View view)
{
    FirebaseAuth.getInstance().signOut();
    LoginManager.getInstance().logOut();
    goLoginScreen();
}


@Override
public void onMapReady(GoogleMap googleMap)
{
    Log.e("fired", "fired");
    LatLng sydney = new LatLng(-34, 15);
    googleMap.addMarker(new MarkerOptions().position(sydney).title("test"));
    googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
}

5 个答案:

答案 0 :(得分:1)

是的,你可以这样;

请在framelayout中尝试,像这样;

    <FrameLayout ...>
    <fragment 
          android:id="@+id/map"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:name="com.google.android.gms.maps.blabla"/>
</FrameLayout>

答案 1 :(得分:0)

您必须通过&#34; OnMapReadyCallback实现您的活动。 然后你就可以触发onMapReady回调方法了。

答案 2 :(得分:0)

要获取onMapReady回调,您需要在activity的onCreate()中使用以下代码。

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

答案 3 :(得分:0)

更改

//获取SupportMapFragment并在准备好使用地图时收到通知。

 SupportMapFragment mapFragment = (SupportMapFragment) 
getSupportFragmentManager()
        .findFragmentById(R.id.map); 

SupportMapFragment mapFragment = ((SupportMapFragment) getChildFragmentManager()
            .findFragmentById(R.id.safety_map));

我预计,它会完美运作。祝你好运!

答案 4 :(得分:0)

先生,也许您在“ build.gradle(Module:app)”中缺少此依赖项:

implementation 'com.google.android.gms:play-services-maps:17.0.0'

希望有帮助。