【问题标题】: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;
            }
        });
    }
}

【问题讨论】:

    标签: android android-studio google-maps android-fragments


    【解决方案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;
                    }
                });
    

    您应该将标记存储到列表中以便于比较位置。

    【讨论】:

    • 实际上我正在开始活动,但我得到的只是标题而不是打开任何活动
    猜你喜欢
    • 2018-05-18
    • 1970-01-01
    • 2021-07-23
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2013-07-19
    相关资源
    最近更新 更多