GoogleMap本质上是Parcelable吗?

By simon at 2018-02-28 • 0人收藏 • 42人看过

我对java和android非常陌生。我陷入了一个基本问题。 在这个给定的fragment中,我可以添加GoogleMap对象as parcelable 没有任何额外的pracelable类作为:

    public class SecondFragment extends Fragment
            implements OnMapReadyCallback {

      public GoogleMap mMap;
      @Override
        public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);                      
          if (savedInstanceState != null) {
            mLastKnownLocation = savedInstanceState.getParcelable(KEY_LOCATION);
            mCameraPosition = savedInstanceState.getParcelable(KEY_CAMERA_POSITION);
          }
        }
 @Override
  public void onSaveInstanceState(Bundle outState) {
    if (mMap != null) {
      outState.putParcelable(KEY_CAMERA_POSITION, mMap.getCameraPosition());
      outState.putParcelable(KEY_LOCATION, mLastKnownLocation);
      super.onSaveInstanceState(outState);
    }
  }
这是我第一次遇到这种可以分类的方法,所以,我也尝试过 在另一个类的字符串中:
public String location;//="No location name found";

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Retrieve location and camera position from saved instance state.
    if (savedInstanceState != null) {
      location = savedInstanceState.getParcelable(KEY_LOCATION_NAME);          
    }
  }

   @Override
  public void onSaveInstanceState(Bundle outState) {
    if (location != null) {
      outState.putParcelable(KEY_LOCATION_NAME, location);
      super.onSaveInstanceState(outState);
    }
  }
这显示编译时间错误:
Error:(205, 49) error: incompatible types: String cannot be converted to Parcelable
所以,我的问题这就是为什么同样的事情为谷歌地图工作,而不是为 串?谷歌地图本身是可以parcelable,并为“正常”的条纹克,我们必须 创建一个可分类的类?

3 个回复 | 最后更新于 2018-02-28
2018-02-28   #1

你可以阅读 [GoogleMap](https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap) 班级页面看看它是不是** implements Parcleable \。

同样的事情正在为谷歌地图工作 你没有保存地图...你很好在...之中 [CameraPosition](https://developers.google.com/android/reference/com/google/android/gms/maps/model/CameraPosition) location是一个字符串,而不是Google Map。 如果你想保存位置,a [LatLng](https://developers.google.com/andr旧/参考/ COM /谷歌/机器人/克/地图/模型/经纬度) 或Location Parcelable \。 对于“正常”字符串,我们必须c创建一个可分类的类? 不。使用字符串,只需使用outState.putString()

2018-02-28   #2

Parcelable用于复杂模型。 如果你想将模型转换为parcelable,你应该实现Parcelable。 有一些插件可以在Android工作室为你做这些工作。 在你的例子中,注意传入意图的对象或保存它们 以后使用的实例对每种类型都有不同的方法。

putString for string
putInt for Int
....
你应该使用你想要的类型适当的方法

2018-02-28   #3

字符串是基本类型,所以您不应该将它用于Parcelable。 如果你想为一个类对象使用Parcelable。班级应该实行 已经可以打包了。

登录后方可回帖

Loading...