我创建了一个地图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));
}
答案 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'
希望有帮助。