【发布时间】:2018-02-27 06:19:23
【问题描述】:
我对 java 和 android 很陌生。我被一个基本问题困住了。
在这个给定的fragment 中,我可以将GoogleMap 对象添加为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
所以,我的问题是为什么同样的事情适用于 googleMap 而不是字符串? googleMap 是否天生可打包,而对于“普通”字符串,我们必须创建一个可打包类?
【问题讨论】:
标签: android parcelable