Khiến các đối tượng dữ liệu phản hồi các sự kiện click và sử dụng các sự kiện này để thay đổi giao diện của một đối tượng dựa trên lượt tương tác của người dùng.
Viết trình xử lý sự kiện nhấp chuột
Khi một sự kiện nhấp chuột xảy ra trên một lớp đối tượng, Maps SDK cho Android sẽ truyền một đối tượng FeatureClickEvent đến trình xử lý sự kiện.
Sử dụng phương thức FeatureClickEvent.getFeatures() để lấy danh sách các đối tượng bị ảnh hưởng bởi lượt nhấp.
Xử lý các sự kiện lớp đối tượng
Hãy làm theo các bước sau để xử lý các sự kiện trên lớp Tập dữ liệu. Trong ví dụ này, bạn áp dụng màu xanh dương cho phần nền và đường viền của đa giác biểu thị đối tượng đã chọn.
Khi bạn gọi FeatureLayer.setFeatureStyle(), hàm tạo kiểu sẽ đặt kiểu đối tượng cho tất cả các đối tượng trong tập dữ liệu. Để cập nhật kiểu của một tập dữ liệu trong trình xử lý sự kiện, bạn phải gọi FeatureLayer.setFeatureStyle() để đặt kiểu đã cập nhật cho tất cả các đối tượng trong tập dữ liệu.
Nếu bạn chưa thực hiện, hãy làm theo các bước trong phần Bắt đầu để tạo mã bản đồ và kiểu bản đồ mới. Nhớ bật lớp đối tượng Tập dữ liệu.
privatevardatasetLayer:FeatureLayer?=null// The globalid of the clicked dataset feature.varlastGlobalId:String?=null overridefunonMapReady(googleMap:GoogleMap){// Get the DATASET feature layer.datasetLayer=googleMap.getFeatureLayer(FeatureLayerOptions.Builder().featureType(FeatureType.DATASET)// Specify the dataset ID..datasetId(YOUR_DATASET_ID).build()) // Register the click event handler for the Datasets layer.datasetLayer?.addOnFeatureClickListener(this) // Apply default style to all features on load to enable clicking.styleDatasetsLayer()} // Define the click event handler to set lastGlobalId to globalid of selected feature.overridefunonFeatureClick(event:FeatureClickEvent){// Get the dataset feature affected by the click.valclickFeatures:MutableList<Feature>=event.featureslastGlobalId=nullif(clickFeatures.get(0)isDatasetFeature){lastGlobalId=((clickFeatures.get(0)asDatasetFeature).getDatasetAttributes().get("globalid"))// Remember to reset the Style Factory.styleDatasetsLayer()}}
Java
privateFeatureLayerdatasetLayer;// The globalid of the clicked dataset feature.Stringlastgobalid=null; @OverridepublicvoidonMapReady(GoogleMapmap){ // Get the DATASET feature layer.datasetLayer=map.getFeatureLayer(newFeatureLayerOptions.Builder().featureType(FeatureType.DATASET)// Specify the dataset ID..datasetId(YOUR_DATASET_ID).build()); // Register the click event handler for the Datasets layer.datasetLayer.addOnFeatureClickListener(this); // Apply default style to all features on load to enable clicking.styleDatasetsLayer();} @Override// Define the click event handler.publicvoidonFeatureClick(FeatureClickEventevent){// Get the dataset feature affected by the click.List<Feature>clickFeatures=event.getFeatures();lastgobalid=null;if(clickFeatures.get(0)instanceofDatasetFeature){lastgobalid=((DatasetFeature)clickFeatures.get(0)).getDatasetAttributes().get("globalid");// Remember to reset the Style Factory.styleDatasetsLayer();}}
Áp dụng màu xanh dương cho đối tượng đã chọn và màu xanh lục cho tất cả các đối tượng khác. Bạn chỉ có thể nhấp vào những đối tượng hiển thị.
Kotlin
// Set fill and border for all features.privatefunstyleDatasetsLayer(){// Create the style factory function.valstyleFactory=FeatureLayer.StyleFactory{feature:Feature-> // Check if the feature is an instance of DatasetFeature.if(featureisDatasetFeature){valglobalIDs:MutableMap<String,String>=feature.getDatasetAttributes()// Determine globalid attribute.valglobalID=globalIDs!!["globalid"]// Set default colors to to green.varfillColor=0x800000ffvarstrokeColor=0xff0000ffif(globalID==lastGlobalId){// Color selected area blue.fillColor=0x8000ff00strokeColor=0xff00ff00}return@StyleFactoryFeatureStyle.Builder().fillColor(fillColor).strokeColor(strokeColor).build()}return@StyleFactorynull} // Apply the style factory function to the dataset feature layer.datasetLayer?.setFeatureStyle(styleFactory)}
Java
// Set default green fill and border for all features.privatevoidstyleDatasetsLayer(){// Create the style factory function.FeatureLayer.StyleFactorystyleFactory=(Featurefeature)->{ // Check if the feature is an instance of DatasetFeature.if(featureinstanceofDatasetFeature){ // Check if "globalid" attribute of feature is the "globalid" of clicked feature.Map<String,String>globalIDs=((DatasetFeature)feature).getDatasetAttributes();StringglobalID=globalIDs.get("globalid");// Set default colors to green.intfillColor=0x4000ff00;intstrokeColor=0xff00ff00;if(Objects.equals(globalID,lastgobalid)){// Color selected area blue.fillColor=0x400000ff;strokeColor=0xff0000ff;}returnnewFeatureStyle.Builder().fillColor(fillColor).strokeColor(strokeColor).strokeWidth(2).build();}returnnull;}; // Apply the style factory function to the feature layer.datasetLayer.setFeatureStyle(styleFactory);}
[null,null,["Cập nhật lần gần đây nhất: 2025-09-05 UTC."],[[["\u003cp\u003eThis guide explains how to make data features on your map clickable and responsive to user interaction, allowing you to change a feature's appearance upon click.\u003c/p\u003e\n"],["\u003cp\u003eIt involves writing a click event handler that captures the clicked feature's information and uses it to apply styling changes.\u003c/p\u003e\n"],["\u003cp\u003eYou will learn to use the \u003ccode\u003eFeatureClickEvent\u003c/code\u003e to get the clicked features and \u003ccode\u003eFeatureLayer.setFeatureStyle()\u003c/code\u003e to update their appearance, highlighting the selected feature.\u003c/p\u003e\n"],["\u003cp\u003eThe guide includes Android code examples demonstrating how to register the event handler and apply a blue fill to the selected feature, while keeping others green.\u003c/p\u003e\n"]]],["The core content explains how to make data features clickable and dynamically change their appearance upon user interaction within the Android Maps SDK. Key actions include: registering a click event handler via `FeatureLayer.addOnFeatureClickListener()`, retrieving the affected features through `FeatureClickEvent.getFeatures()`, and using `FeatureLayer.setFeatureStyle()` with a custom style factory to apply visual changes. The `globalid` is used to identify and update the style of a selected feature, changing it from a default green to blue.\n"],null,["Select platform: [Android](/maps/documentation/android-sdk/dds-datasets/make-data-features-clickable \"View this page for the Android platform docs.\") [iOS](/maps/documentation/ios-sdk/dds-datasets/make-data-features-tappable \"View this page for the iOS platform docs.\") [JavaScript](/maps/documentation/javascript/dds-datasets/make-data-features-clickable \"View this page for the JavaScript platform docs.\")\n\n\u003cbr /\u003e\n\nMake data features respond to `click` events, and use them to\nchange the appearance of a feature based on user interaction.\n\nWrite a click event handler\n\nWhen a click event occurs on a feature layer, the Maps SDK for Android passes a\n[`FeatureClickEvent`](/android/reference/com/google/android/gms/maps/model/FeatureClickEvent)\nobject to the event handler.\n\nUse the `FeatureClickEvent.getFeatures()` method to get the list of features\naffected by the click.\n\nHandle feature layer events\n\nTake the following steps to handle events on the Datasets layer. In this\nexample, you apply a blue fill and border to the polygon representing the\nselected feature.\n| **Note:** In this example, the `globalid` attribute of the dataset contains a unique identifier for each polygon. You can then examine the `globalid` of the polygon that was clicked to apply the blue styling only to that polygon.\n\nWhen you call\n[`FeatureLayer.setFeatureStyle()`](/android/reference/com/google/android/gms/maps/model/FeatureLayer#setFeatureStyle(com.google.android.gms.maps.model.FeatureLayer.StyleFactory)),\nthe style factory function sets the feature style on all features in the\ndataset. To update the style of a dataset in the event handler, you must\ncall `FeatureLayer.setFeatureStyle()` to set the updated style on all dataset\nfeatures.\n\n1. If you haven't already done so, follow the steps in\n [Get Started](/maps/documentation/android/dds-datasets/start)\n to create a new map ID and map style. Be sure to enable the **Datasets**\n feature layer.\n\n2. Make sure your class implements\n [`FeatureLayer.OnFeatureClickListener`](/android/reference/com/google/android/gms/maps/model/FeatureLayer.OnFeatureClickListener).\n\n3. Register an event handler for feature click events by calling\n [`FeatureLayer.addOnFeatureClickListener()`](/android/reference/com/google/android/gms/maps/model/FeatureLayer#addOnFeatureClickListener(com.google.android.gms.maps.model.FeatureLayer.OnFeatureClickListener)).\n\n Kotlin\n\n\n ```java\n private var datasetLayer: FeatureLayer? = null\n // The globalid of the clicked dataset feature.\n var lastGlobalId: String? = null\n\n override fun onMapReady(googleMap: GoogleMap) {\n // Get the DATASET feature layer.\n datasetLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder()\n .featureType(FeatureType.DATASET)\n // Specify the dataset ID.\n .datasetId(YOUR_DATASET_ID)\n .build())\n\n // Register the click event handler for the Datasets layer.\n datasetLayer?.addOnFeatureClickListener(this)\n\n // Apply default style to all features on load to enable clicking.\n styleDatasetsLayer()\n }\n\n // Define the click event handler to set lastGlobalId to globalid of selected feature.\n override fun onFeatureClick(event: FeatureClickEvent) {\n // Get the dataset feature affected by the click.\n val clickFeatures: MutableList\u003cFeature\u003e = event.features\n lastGlobalId = null\n if (clickFeatures.get(0) is DatasetFeature) {\n lastGlobalId = ((clickFeatures.get(0) as DatasetFeature).getDatasetAttributes().get(\"globalid\"))\n // Remember to reset the Style Factory.\n styleDatasetsLayer()\n }\n }\n ```\n\n \u003cbr /\u003e\n\n Java\n\n\n ```java\n private FeatureLayer datasetLayer;\n // The globalid of the clicked dataset feature.\n String lastgobalid = null;\n\n @Override\n public void onMapReady(GoogleMap map) {\n\n // Get the DATASET feature layer.\n datasetLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder()\n .featureType(FeatureType.DATASET)\n // Specify the dataset ID.\n .datasetId(YOUR_DATASET_ID)\n .build());\n\n // Register the click event handler for the Datasets layer.\n datasetLayer.addOnFeatureClickListener(this);\n\n // Apply default style to all features on load to enable clicking.\n styleDatasetsLayer();\n }\n\n @Override\n // Define the click event handler.\n public void onFeatureClick(FeatureClickEvent event) {\n // Get the dataset feature affected by the click.\n List\u003cFeature\u003e clickFeatures = event.getFeatures();\n lastgobalid = null;\n if (clickFeatures.get(0) instanceof DatasetFeature) {\n lastgobalid = ((DatasetFeature) clickFeatures.get(0)).getDatasetAttributes().get(\"globalid\");\n // Remember to reset the Style Factory.\n styleDatasetsLayer();\n }\n }\n ```\n\n \u003cbr /\u003e\n\n4. Apply a fill color of blue to the selected feature and green to all other\n features. Only visible features are clickable.\n\n Kotlin\n\n\n ```java\n // Set fill and border for all features.\n private fun styleDatasetsLayer() {\n // Create the style factory function.\n val styleFactory = FeatureLayer.StyleFactory { feature: Feature -\u003e\n\n // Check if the feature is an instance of DatasetFeature.\n if (feature is DatasetFeature) {\n val globalIDs: MutableMap\u003cString, String\u003e = feature.getDatasetAttributes()\n // Determine globalid attribute.\n val globalID = globalIDs!![\"globalid\"]\n // Set default colors to to green.\n var fillColor = 0x800000ff\n var strokeColor = 0xff0000ff\n if (globalID == lastGlobalId) {\n // Color selected area blue.\n fillColor = 0x8000ff00\n strokeColor = 0xff00ff00\n }\n return@StyleFactory FeatureStyle.Builder()\n .fillColor(fillColor)\n .strokeColor(strokeColor)\n .build()\n }\n return@StyleFactory null\n }\n\n // Apply the style factory function to the dataset feature layer.\n datasetLayer?.setFeatureStyle(styleFactory)\n }\n ```\n\n \u003cbr /\u003e\n\n Java\n\n\n ```java\n // Set default green fill and border for all features.\n private void styleDatasetsLayer() {\n // Create the style factory function.\n FeatureLayer.StyleFactory styleFactory = (Feature feature) -\u003e {\n\n // Check if the feature is an instance of DatasetFeature.\n if (feature instanceof DatasetFeature) {\n\n // Check if \"globalid\" attribute of feature is the \"globalid\" of clicked feature.\n Map\u003cString, String\u003e globalIDs = ((DatasetFeature) feature).getDatasetAttributes();\n String globalID = globalIDs.get(\"globalid\");\n // Set default colors to green.\n int fillColor = 0x4000ff00;\n int strokeColor = 0xff00ff00;\n if (Objects.equals(globalID, lastgobalid)) {\n // Color selected area blue.\n fillColor = 0x400000ff;\n strokeColor = 0xff0000ff;\n }\n return new FeatureStyle.Builder()\n .fillColor(fillColor)\n .strokeColor(strokeColor)\n .strokeWidth(2)\n .build();\n }\n return null;\n };\n\n // Apply the style factory function to the feature layer.\n datasetLayer.setFeatureStyle(styleFactory);\n }\n ```\n\n \u003cbr /\u003e"]]