单击标记时打开不同的活动(多个标记)

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 中活动标记的不透明度

Android谷歌地图,如何让每个Marker InfoWindow打开不同的Activity?

谷歌地图打开标记点击活动

在地图上显示多个标记时,单击标记时如何只打开一个信息窗口?

当且仅当区域在 Emacs 中处于活动状态时,标记是不是处于活动状态?