Download File
Download Project
Settings
Line Wrap
Themes
default
ambiance
bespin
dracula
eclipse
material
mbo
mdn-like
neat
solarized dark
ttcn
zenburn
GalleryAdapter.java
/* * Copyright 2015 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.samples.apps.ourstreets.view; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.samples.apps.ourstreets.R; import com.google.samples.apps.ourstreets.model.Gallery; import java.util.List; public class GalleryAdapter extends RecyclerView.Adapter
{ private static final int MAP_ZOOM = 3; private final List
mGalleryCollection; private final String mItemViewBase; private final String mDescriptionContainerBase; private final String mDetailTransitionBase; private final String mDescriptionTitleBase; private final String mMapBase; private final OnMapReadyCallback mInitialOnMapReadyCallback = new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { googleMap.setMapType(GoogleMap.MAP_TYPE_NONE); googleMap.getUiSettings().setMapToolbarEnabled(false); } }; public GalleryAdapter(@NonNull List
data, @NonNull Context context) { mGalleryCollection = data; mItemViewBase = context.getString(R.string.transition_item_view); mDescriptionContainerBase = context.getString(R.string.transition_description); mDetailTransitionBase = context.getString(R.string.transition_description_detail); mDescriptionTitleBase = context.getString(R.string.transition_description_title); mMapBase = context.getString(R.string.transition_map); } @Override public GalleryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()) .inflate(R.layout.gallery_item, parent, false); GalleryViewHolder holder = new GalleryViewHolder(v); initializeMapView(holder.mapView); return holder; } private void initializeMapView(MapView mapView) { mapView.onCreate(null); mapView.getMapAsync(mInitialOnMapReadyCallback); // lite mode enabled within map's layout declaration // Requirement to set clickable to false in order to not open the Google Maps application. // See: https://developers.google.com/maps/documentation/android-api/events#disabling_click_events_in_lite_mode mapView.setClickable(false); } @Override public void onBindViewHolder(GalleryViewHolder holder, int position) { final int adapterPosition = holder.getAdapterPosition(); final Gallery gallery = mGalleryCollection.get(adapterPosition); // Set transition names here and not in the layout declaration, // because multiple identical transition names at the same time // confuse the transition system. holder.itemView.setTransitionName(mItemViewBase + adapterPosition); holder.descriptionContainer.setTransitionName(mDescriptionContainerBase + adapterPosition); holder.descriptionText.setTransitionName(mDescriptionTitleBase + adapterPosition); holder.titleText.setTransitionName(mDetailTransitionBase + adapterPosition); holder.mapView.setTransitionName(mMapBase + adapterPosition); // Bind the user visible information. holder.titleText.setText(gallery.getTitle()); holder.descriptionText.setText(gallery.getDescription()); final MapView mapView = holder.mapView; mapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(gallery.getPosition(), MAP_ZOOM)); googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mapView.setVisibility(View.VISIBLE); } }); } @Override public void onViewRecycled(GalleryViewHolder holder) { // Avoid map glitches provoked due to scrolling behavior. holder.mapView.setVisibility(View.INVISIBLE); } @Override public long getItemId(int position) { return mGalleryCollection.get(position).hashCode(); } @Override public int getItemCount() { return mGalleryCollection.size(); } }