Create a custom layout for Merchants marker's info dialogs in the MerchantsFragment map, to be able to show all the required information using a custom adapter.
This commit is contained in:
parent
6a8def0cf1
commit
69c27d3092
2 changed files with 114 additions and 1 deletions
|
@ -15,6 +15,7 @@ import com.google.android.gms.maps.SupportMapFragment
|
||||||
|
|
||||||
import cy.agorise.bitsybitshareswallet.R
|
import cy.agorise.bitsybitshareswallet.R
|
||||||
import android.preference.PreferenceManager
|
import android.preference.PreferenceManager
|
||||||
|
import android.widget.TextView
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
|
@ -52,6 +53,8 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback {
|
||||||
private var mMerchantClusterManager: ClusterManager<Merchant>? = null
|
private var mMerchantClusterManager: ClusterManager<Merchant>? = null
|
||||||
private var mTellerClusterManager: ClusterManager<Teller>? = null
|
private var mTellerClusterManager: ClusterManager<Teller>? = null
|
||||||
|
|
||||||
|
private var selectedMerchant: Merchant? = null
|
||||||
|
|
||||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
return inflater.inflate(R.layout.fragment_merchants, container, false)
|
return inflater.inflate(R.layout.fragment_merchants, container, false)
|
||||||
}
|
}
|
||||||
|
@ -110,6 +113,8 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback {
|
||||||
mMerchantClusterManager?.onCameraIdle()
|
mMerchantClusterManager?.onCameraIdle()
|
||||||
mTellerClusterManager?.onCameraIdle()
|
mTellerClusterManager?.onCameraIdle()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mMap.setInfoWindowAdapter(mMarkerManager)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun applyMapTheme() {
|
private fun applyMapTheme() {
|
||||||
|
@ -149,7 +154,12 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback {
|
||||||
mMerchantClusterManager?.renderer = merchantRenderer
|
mMerchantClusterManager?.renderer = merchantRenderer
|
||||||
|
|
||||||
mMerchantClusterManager?.setOnClusterClickListener { onClusterClick(it as Cluster<ClusterItem>) }
|
mMerchantClusterManager?.setOnClusterClickListener { onClusterClick(it as Cluster<ClusterItem>) }
|
||||||
mMerchantClusterManager?.setOnClusterItemClickListener { false }
|
mMerchantClusterManager?.setOnClusterItemClickListener { merchant ->
|
||||||
|
selectedMerchant = merchant
|
||||||
|
false
|
||||||
|
}
|
||||||
|
|
||||||
|
mMerchantClusterManager?.markerCollection?.setOnInfoWindowAdapter(MerchantInfoWindowAdapter())
|
||||||
|
|
||||||
mMerchantViewModel.getAllMerchants().observe(this, Observer<List<Merchant>> {merchants ->
|
mMerchantViewModel.getAllMerchants().observe(this, Observer<List<Merchant>> {merchants ->
|
||||||
mMerchantClusterManager?.clearItems()
|
mMerchantClusterManager?.clearItems()
|
||||||
|
@ -195,4 +205,51 @@ class MerchantsFragment : Fragment(), OnMapReadyCallback {
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inner class MerchantInfoWindowAdapter : GoogleMap.InfoWindowAdapter {
|
||||||
|
|
||||||
|
override fun getInfoWindow(marker: Marker?): View {
|
||||||
|
val infoWindowLayout: View = LayoutInflater.from(context).inflate(
|
||||||
|
R.layout.map_pin_info_dialog, null)
|
||||||
|
val tvName = infoWindowLayout.findViewById<TextView>(R.id.tvName)
|
||||||
|
val tvAddress = infoWindowLayout.findViewById<TextView>(R.id.tvAddress)
|
||||||
|
val tvPhone = infoWindowLayout.findViewById<TextView>(R.id.tvPhone)
|
||||||
|
val tvTelegram = infoWindowLayout.findViewById<TextView>(R.id.tvTelegram)
|
||||||
|
val tvWebsite = infoWindowLayout.findViewById<TextView>(R.id.tvWebsite)
|
||||||
|
|
||||||
|
if (selectedMerchant != null) {
|
||||||
|
tvName.text = selectedMerchant?.name
|
||||||
|
|
||||||
|
if (selectedMerchant?.name != null)
|
||||||
|
tvAddress.text = selectedMerchant?.address
|
||||||
|
else
|
||||||
|
tvAddress.visibility = View.GONE
|
||||||
|
|
||||||
|
if (selectedMerchant?.phone != null)
|
||||||
|
tvPhone.text = selectedMerchant?.phone
|
||||||
|
else
|
||||||
|
tvPhone.visibility = View.GONE
|
||||||
|
|
||||||
|
if (selectedMerchant?.telegram != null)
|
||||||
|
tvTelegram.text = selectedMerchant?.telegram
|
||||||
|
else
|
||||||
|
tvTelegram.visibility = View.GONE
|
||||||
|
|
||||||
|
if (selectedMerchant?.website != null)
|
||||||
|
tvWebsite.text = selectedMerchant?.website
|
||||||
|
?.removePrefix("http://")?.removePrefix("https://")
|
||||||
|
else
|
||||||
|
tvWebsite.visibility = View.GONE
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return infoWindowLayout
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getInfoContents(marker: Marker?): View? {
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
56
app/src/main/res/layout/map_pin_info_dialog.xml
Normal file
56
app/src/main/res/layout/map_pin_info_dialog.xml
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:padding="4dp"
|
||||||
|
android:background="?android:colorBackground">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvName"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
tools:text="Bambuddha Holistic Center"
|
||||||
|
android:textAppearance="@style/TextAppearance.Bitsy.Body1"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvAddress"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
tools:text="Carretera, Barra Vieja Km 37, 39936 Acapulco, Gro."
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvPhone"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
tools:text="+52 744.444.6406"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvTelegram"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
tools:text="\@Bambuddha"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvWebsite"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
tools:text="Bambuddha.com.mx"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:ellipsize="end"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
Loading…
Reference in a new issue