Я пытаюсь передать данные карты из фрагмента карты в отдельном фрагменте того же действия.
Когда пользователь нажимает на POI карты, я звоню в Google и беру куча данных, включая Place.Type, которые я хочу передать новому фрагменту, к сожалению, Place.Type возвращает ошибку, говорящую, что это неправильный тип .. unparcelable. Android студия предложила мне вариант приведения к parcelable, который я пробовал и разбил.
Глядя в ссылку, Google говорит, что Place.Types реализует parcelable, поэтому я немного запутался, почему это не удается
Я уверен, что есть способ l oop подумать и переделать или что-то еще, но мое отсутствие знаний сдерживает меня, может кто-нибудь, пожалуйста, помогите здесь?
public class ZombieMapActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMyLocationButtonClickListener, GoogleMap.OnMyLocationClickListener, GoogleMap.OnPoiClickListener {
private GoogleMap mMap;
private final int PERM_REQUEST_LOCATION_INT = 1;
private FusedLocationProviderClient FusedLocationClient;
private String apiKey;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zombie_map);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
//location
FusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
//places API stuff
apiKey = getResources().getString(R.string.google_maps_key);
Places.initialize(getApplicationContext(), apiKey);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
//perm check
...{
mapSetup();
}
}
private void requestPerms() { ... }
//catch request reply
@Override
public void onRequestPermissionsResult(
int requestCode,
String permissions[],
int[] grantResults) { ... }
}
private void mapSetup() {...}
@Override
public boolean onMyLocationButtonClick() {...}
@Override
public void onMyLocationClick(@NonNull Location location) {
makeToast("This is you");
}
@Override
public void onPoiClick(final PointOfInterest poi) {
//distance check and throw out if to far
//great place to think about a caching system for types.. to cut down on requests
//placeId to place type method
PlacesClient placesClient = Places.createClient(this);
String placeId = poi.placeId;
List<Place.Field> placeFields = Arrays.asList(Place.Field.ID, Place.Field.TYPES);
FetchPlaceRequest request = FetchPlaceRequest.newInstance(placeId, placeFields);
placesClient.fetchPlace(request).addOnSuccessListener(new OnSuccessListener<FetchPlaceResponse>() {
@Override
public void onSuccess(FetchPlaceResponse fetchPlaceResponse) {
Place place = fetchPlaceResponse.getPlace();
List<Place.Type> types = place.getTypes();
String placeName = poi.name;
makeLootFragment(types,placeName);
makeToast(placeName);
}
});
}
private void makeLootFragment(List<Place.Type> _types,String name){
//pack it for sending
Bundle lootBundle = new Bundle();
lootBundle.putParcelable("bLootTypes" , (Parcelable) _types);//not working
lootBundle.putString("bName",name);
FragmentManager lootFragMan = getSupportFragmentManager();
FragmentTransaction LootTrans = lootFragMan.beginTransaction();
LootFragment lootFragment = new LootFragment();
lootFragment.setArguments(lootBundle);
LootTrans.add(R.id.lootContainer,lootFragment);
LootTrans.addToBackStack("LootStack");
LootTrans.commit();
}
private void makeToast(String words) {
Toast.makeText(this, words, Toast.LENGTH_SHORT).show();
}
}
Любой другой совет, основанный на ужасная кодировка, отображаемая здесь, также будет очень полезна: D