我有一个扩展SupportMapFragment的类,我从后端加载一些数据并显示标记.我还有另一个片段,我在地图上显示与所选标记相对应的细节.我正在以纵向模式在地图下方显示细节片段,并在横向中并排显示.
public class MapDisplayFragment extends SupportMapFragment {
private ArrayList<ShowLocation> locations = null;
public void onViewCreated(View view, Bundle savedInstanceState) {
if (savedInstanceState != null) {
locations = (ArrayList<ShowLocation>)savedInstanceState.getSerializable("LOCATIONS");
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
if (outState == null) {
outState = new Bundle();
}
outState.putSerializable("LOCATIONS", locations);
super.onSaveInstanceState(outState);
}
Run Code Online (Sandbox Code Playgroud)
我有一个实现Serializable的类,它在派生的map类中使用.我使用onSaveInstanceState来存储对象,这样我就不必再从后端检索数据.但应用程序崩溃与java.lang.RuntimeException:Parcelable遇到ClassClassNotFoundException当我翻转设备时读取Serializable对象.
public class ShowLocation implements Serializable {
private String geoCodeLat = Constants.EMPTY_STRING;
private String geoCodeLng = Constants.EMPTY_STRING;
....
public String getGeoCodeLat() {
return geoCodeLat;
}
public void …Run Code Online (Sandbox Code Playgroud) 我有一个地图活动(SherlockFragmentActivity)加载在地图片段中,该片段有2个按钮,并在显示2个不同片段之间切换(GoogleMapFragment和ScaleImageViewFragment)
当我点击Exhibitor Map按钮时它会替换片段,但是当我点击后面我得到一个"java.lang.IllegalStateException:Activity已被销毁"错误
ERROR/AndroidRuntime(5768): FATAL EXCEPTION: main
java.lang.IllegalStateException: Activity has been destroyed
at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
at com.takeit2eleven.towniemeeting.android.fragments.GoogleMapFragment.onCreateView(GoogleMapFragment.java:42)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
这是我的MapsFragment.java文件:
public class MapsFragment extends SherlockFragment {
Button mHotelMapButton;
Button mExhibitorButton;
GoogleMapFragment mGoogleMapFragment;
ScaleImageViewFragment mScaleImageViewFragment;
static boolean mShowingGoogleMap = true;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if …Run Code Online (Sandbox Code Playgroud) android android-fragments android-activity mapfragment supportmapfragment
我正在开发一个显示地图的Android应用程序.
我正在使用MapFragment来显示我的地图.我获得了一个API密钥,并为我的清单添加了所有必需的权限.
到目前为止一切顺利,在Android 4.1上我的HTC One S上调试应用程序时一切正常,地图显示包括控件和其他所有内容.
当我在运行Android 4.2.2的Galaxy S4上调试相同的应用程序时,地图保持空白,只有控件显示.
互联网连接绝对可用.
我在Galaxy S4上收到的"错误消息"是"无法加载地图.无法联系谷歌服务."
这是我的清单:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="com.mypackage.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<permission
android:name="com.mypackage.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="myobtainedkey" />
Run Code Online (Sandbox Code Playgroud)
再说一遍:我的HTC One S一切正常,我正在寻找地图没有加载到S4的原因?
我已经尝试过的事情:
我的应用程序有三个不同的活动使用a SupportMapFragment.启动应用程序后第一次加载会出现重大延迟.即使我返回并访问完全不同的Activity(也包含地图),后续加载时也不会出现这种缓慢的加载时间.我想知道这是否是我能解决的问题.
这个要点显示了我如何加载SupportMapFragment.使用调试点我已经确定缓慢发生在onViewCreated和之间onStart.
更新1:使用Debug我已经采取了第一次加载和第二次加载的两条痕迹.第二个负载是完全不同的Activity.我很快注意到第一个跟踪(慢速加载)有很多调用java/util/zip/zipEntry.在第二个跟踪中我没有看到任何类似的调用.此外,这种延迟现象之间onCreateView和onViewCreated的MapFragment的.
更新2:这也发生在MapFragment(不支持),但延迟实际上要长得多.
在这个应用程序中,我正在尝试添加功能V2谷歌地图.我已经查看了大多数创建活动的教程,获取了地图的密钥,并创建了xml文件,试着看看我是否错过了任何一步(我经历了4次),但它没有好像我错过了任何一步.
这是我使用的网站:
当我在手机上运行我的应用程序时(因为Google Play服务无法在模拟器上运行),它会给我这两个错误:
02-11 22:10:54.690: E/AndroidRuntime(4526): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.ShowActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class fragment
02-11 22:10:54.690: E/AndroidRuntime(4526):
Caused by: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public
Run Code Online (Sandbox Code Playgroud)
这是我的活动:
package com.example.myfirstapp;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import com.google.android.maps.*;
import com.google.android.gms.maps.MapFragment;
public class ShowActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
} …Run Code Online (Sandbox Code Playgroud) 我想在Android google mapFragment(如Uber)的蓝点当前用户位置添加脉冲环动画.
有人可以帮我这件事吗?
我搜索了新的Google Android Map API v2的文档,但没有找到任何相关信息.在v2之前,我们(官方)无法正确显示每个应用程序(进程)的多个映射.我认为,随着MapFragment实施,它不再是一个问题.我也知道,Fragments自API 17以来,它可以是自包含的.而且,最后但并非最不重要的是,有兼容性包,这使得将它全部移回至少API 8成为可能(在API 7中,没有OpenGL 2.0所以地图不会起作用).
Sa我拥有将我的应用程序移植到Maps API v2并实现以下场景的所有要素:ViewPagercontains Fragments并且每个都包含一个MapFragment.
但我应该这样做吗?我的意思是,我将面临性能问题,如果我如20 Fragments包含MapFragments在一个ViewPager?
如果您在文档或其他地方找到了解决我问题的任何内容,请告诉我.
编辑:示例用法:让我们想象一个屏幕,其中包含有关某些特定项目的信息 - 地点,事件,文章.另外,让我们想象一下,在其他信息中,它必须包含一个完全正常运行的地图.但我希望用户能够根据需要刷到另一个项目.每个项目都有自己的地图.
旁注:我知道我可以在外面实现一个地图ViewPager,只是根据当前显示的项目进行更新,但这不是我想要的 - 它不是以用户为中心的设计.
可能的解决方案(但尚未检查).ViewPager只在它的缓存中保留一些(默认值为3)片段,并在它们即将显示时重新创建它们,因此不会有太多的内存开销,因为只需要少量内存MapFragments.MapFragment我认为,性能问题可能是通货膨胀非常沉重 - 但这可以通过回收再利用来解决MapFragments.
那么,如果我相信它会很好用的话,为什么我不会实现呢?还有一个问题是,如果MapFragments没有应用程序看起来像它已经坏了就无法移动.看到这个.
我刚开始使用MapFragments,我可以在我的Activity中显示Map.我只是使用一个简单的XML布局,它按预期工作:

现在,我需要在代码中获取Fragment,这样我就可以开始与Map进行交互了.这是我遇到问题的地方:

如您所见,MapFragment(或getFragmentManager)无法解析为某种类型.我的目标是Android 4,API级别17:

你也可以看到我正在引用Googke Play库.
为清晰起见,这是清单:

所以,最大的问题是:为什么我无法解决MapFragment?我错过了什么?=)
作为旁注:SupportMapFragment似乎解决好了,但那不是我想要的.
MapFragment与操作栏菜单一起使用时出现性能问题.
当满足三个条件时,错误就会出现
MapFragment实例化的.再次打开选项菜单并再次解除它可以解决问题.
这种行为不会出现
onCreate()popBackStack从选项菜单调用最小的工作示例(需要访问Google Maps API):
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import com.google.android.gms.maps.MapFragment;
public class MapFragmentBugActivity extends Activity {
Fragment mMapFragment;
String MAP = "Map";
String BLANK = "Blank";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_bug);
mMapFragment = new MapFragment();
getFragmentManager().beginTransaction()
.replace(R.id.main, mMapFragment)
.commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(MAP);
menu.add(BLANK);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem …Run Code Online (Sandbox Code Playgroud) 我有一个带有一些碎片的导航抽屉.每个片段在布局中都有一个MapFragment.最初,当应用程序运行导航抽屉时,单击打开片段一次,但是当我单击相同的导航项以第二次打开相同的片段(在访问其他片段之后)后,我得到以下错误onCreateView()
Binary XML file line #1: Error inflating class fragment
Run Code Online (Sandbox Code Playgroud)
下面是我的片段代码:
user_map_Fragment.xml
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical"
android:id="@+id/parentContainer"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="200dp"
android:name="com.google.android.gms.maps.MapFragment"/>
......
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
MainFragment.cs
public class MainFragement : Android.Support.V4.App.Fragment, IOnMapReadyCallback, ILocationListener, Android.Views.View.IOnKeyListener
{
private GoogleMap mMap;
private LocationManager _locationManager;
private string _locationProvider;
private Android.Locations.Location _currentLocation;
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
if (v == null)
{
v = inflater.Inflate(Resource.Layout.Main, container, false);
SetUpMap();
InitializeLocationManager();
}
return v;
}
}
private void SetUpMap()
{
if …Run Code Online (Sandbox Code Playgroud) android google-maps android-fragments mapfragment supportmapfragment