use*_*522 5 android google-maps android-mapview
我使用了Maps V2 FragmentActivity,SupportMapFragment
但是现在我正试图让它工作不使用上面但是使用
MapView.地图文档似乎说你可以这样做.
该应用程序运行,但我只是得到一个黑屏,没有地图.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.google.android.gms.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
Java文件:
package com.jps.mapstestthree;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.LayoutInflater;
import android.content.Context;
import com.google.android.gms.maps.*;
import com.google.android.gms.maps.model.*;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
public class MainActivity extends Activity
implements OnMapReadyCallback
{
private GoogleMap googleMap;
private View view;
private MapView mapView;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
context = (Context)getApplication();
LayoutInflater inflater =(LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.activity_main, null);
mapView = (MapView)view.findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try
{
initilizeMap();
}
catch (Exception e)
{
}
}
private void initilizeMap()
{
if ( googleMap == null )
{
mapView.getMapAsync(this);
}
}
@Override
protected void onResume()
{
mapView.onResume();
super.onResume();
initilizeMap();
}
@Override
public void onMapReady(GoogleMap map)
{
map.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
}
}
Run Code Online (Sandbox Code Playgroud)
我使用Fragments时的AndroidManifest.xml没有变化,所以我知道Key和其他所有东西都在工作.
我删除了支持v4 .jar,因为我不需要它,如果没有使用碎片.
我尝试使用其他方法,比如onDestory()定义,因为它似乎希望所有方法都进行MapView转发,但它抱怨它们,所以我删除了它们.
我尝试了更多的东西onMapReady(),但似乎没有多大好处.
很少有使用MapViewV2的例子.
是否可以在不使用Fragment和使用MapView的情况下显示地图?
如果是这样,我需要做什么才能显示出来?
更新1:
我尝试了几件事,但仍然没有运气.我添加了所有转发public final void onDestroy()等等,这次没有抱怨,而且,在Logcat中,看起来它仍然试图在支持v4 .jar中引用Fragment,所以我甚至添加了支持v4 .jar,re -did一个带有--subprojects的android更新项目,但我仍然得到一个黑屏,但确实有它的标题.
是的,这是同一个项目,我只是重命名了主项目名称,包名称相同,Key与工作时相同.
我还删除了带有地图的顶级导入.*并添加了所需的单个导入,并且它做了一个干净的构建.
更新2:
我终于在没有使用支持v4 .jar的情况下工作了!和任何碎片.我RawMapViewDemo.java在播放服务示例中找到了示例源代码,基本上改变了应用程序,用--subprojects重新运行'android update project',它工作了!!
这是完整的来源,希望它可以帮助某人.
package com.jps.mapstestthree;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapView;
public class MainActivity extends Activity
implements OnMapReadyCallback
{
// Google Map
private GoogleMap googleMap;
private View view;
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = (MapView)findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
mapView.getMapAsync(this);
}
@Override
protected void onResume()
{
super.onResume();
mapView.onResume();
}
@Override
public void onMapReady(GoogleMap map)
{
map.addMarker(new MarkerOptions()
.position(new LatLng(0, 0))
.title("Marker"));
}
@Override
public final void onDestroy()
{
mapView.onDestroy();
super.onDestroy();
}
@Override
public final void onLowMemory()
{
mapView.onLowMemory();
super.onLowMemory();
}
@Override
public final void onPause()
{
mapView.onPause();
super.onPause();
}
}
Run Code Online (Sandbox Code Playgroud)
dm7*_*m78 10
你的问题的更新让你对如何解决这个问题充满了神秘感.
所需要的只是遵循API文档并将父Activity或Fragment的生命周期回调(至少指定的)转发到MapView:
这个类的用户必须转发来自所有生命周期方法
Activity或Fragment含有此视图在这个类的相应的一些.特别是,您必须转发以下方法:
onCreate(Bundle)onResume()onPause()onDestroy()onSaveInstanceState()onLowMemory()
然后,当然,使用API文档中MapView#getMapAsync(OnMapReadyCallback)指定的方式来获取对所使用的引用.GoogleMapMapView
| 归档时间: |
|
| 查看次数: |
7871 次 |
| 最近记录: |