单击标记时打开不同的活动(多个标记)
Posted
技术标签:
【中文标题】单击标记时打开不同的活动(多个标记)【英文标题】:Open different activity when click on marker(multiple marker) 【发布时间】:2020-10-20 03:04:27 【问题描述】:当我点击标记时,我想打开地图的新活动。我已经创建了多个标记,但在这段代码中,我只是从中获取了标题名称。
例如,有 7 个标记位置,如果我按下任何标记,则会打开新活动并且应该有一些数据,因此如果我单击另一个标记,则会打开另一个活动,其中包含一些内容。
但它应该会打开并显示有关该位置的一些详细信息。您可以只指导我完成两项活动,之后我将能够完成其余的工作。
Location1Fragment.java
package com.example.ncaputtarakhand;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import java.util.ArrayList;
/**
* A simple @link Fragment subclass.
* Use the @link Location1Fragment#newInstance factory method to
* create an instance of this fragment.
*/
public class Location1Fragment extends Fragment implements OnMapReadyCallback
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
private GoogleMap mMap;
ArrayList<LatLng> arrayList = new ArrayList<LatLng>();
LatLng sydney = new LatLng(-34, 151);
LatLng Tasmorth = new LatLng(-31.083332, 150.916672);
LatLng NewCast = new LatLng(-32.916668, 151.750000);
LatLng Brisbane = new LatLng(-27.470125, 153.021072);
LatLng Dubbo = new LatLng(-32.256943, 148.601105);
//for creating name for markers
ArrayList<String> title = new ArrayList<String>();
public Location1Fragment()
// Required empty public constructor
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment Location1Fragment.
*/
// TODO: Rename and change types and number of parameters
public static Location1Fragment newInstance(String param1, String param2)
Location1Fragment fragment = new Location1Fragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
arrayList.add(sydney);
arrayList.add(Tasmorth);
arrayList.add(NewCast);
arrayList.add(Brisbane);
arrayList.add(Dubbo);
title.add("Sydney");
title.add("Tasmorth");
title.add("NewCast");
title.add("Brisbane");
title.add("Dubbo");
if (getArguments() != null)
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_location1, container, false);
return v;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
super.onViewCreated(view, savedInstanceState);
SupportMapFragment mapFragment = (SupportMapFragment)getChildFragmentManager().findFragmentById(R.id.map1);
mapFragment.getMapAsync(this);
@Override
public void onMapReady(GoogleMap googleMap)
mMap = googleMap;
for (int i=0;i<arrayList.size();i++)
for (int j=0;j<title.size();j++)
//this loop for setting title
mMap.addMarker(new MarkerOptions().position(arrayList.get(i)).title(String.valueOf(title.get(j))));
mMap.moveCamera(CameraUpdateFactory.newLatLng(arrayList.get(i)));
//we add onclick listener
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
@Override
public boolean onMarkerClick(Marker marker)
String markertitle= marker.getTitle();
Intent i = new Intent(getActivity(),DetailsActivity.class);
i.putExtra("title",markertitle);
startActivity(i);
return false;
);
【问题讨论】:
【参考方案1】:在您的地图 OnMarkerClickListerner 上,只需检查您的标记位置是否与您的地点位置匹配
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
@Override
public boolean onMarkerClick(Marker marker)
String markertitle= marker.getTitle();
if (marker.getPosition() == Tasmorth)
//launch activity here
return false;
);
您应该将标记存储到列表中以便于比较位置。
【讨论】:
实际上我正在开始活动,但我得到的只是标题而不是打开任何活动以上是关于单击标记时打开不同的活动(多个标记)的主要内容,如果未能解决你的问题,请参考以下文章
从我自己的 Android 应用程序单击我的 Google 地图活动中的标记时打开浏览器 url
更改 react-native-maps 中活动标记的不透明度