마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

마커마다 다른 클릭리스너를 받으려하는데요 어떻게받나요?

0 추천
    for (int i = 0; i < 30; i++) {

            // 날씨 데이터를 추출
            s += "" + i + ": 위치정보: ";
            Node node = nodeList.item(i); // data엘리먼트 노드
            Element fstElmnt = (Element) node;
            NodeList nameList = fstElmnt.getElementsByTagName("addr");
            Element nameElement = (Element) nameList.item(0);
            nameList = nameElement.getChildNodes();
            s += ((Node) nameList.item(0)).getNodeValue() + " ,";

            NodeList websiteList = fstElmnt
                  .getElementsByTagName("yadmNm");
            // <wfKor>맑음</wfKor>
            s += "병원이름 = "
                  + websiteList.item(0).getChildNodes().item(0)
                        .getNodeValue() + "\n";

            NodeList lon = fstElmnt.getElementsByTagName("XPos");

            NodeList lat = fstElmnt.getElementsByTagName("YPos");

            NodeList distance = fstElmnt.getElementsByTagName("distance");

            NodeList phone = fstElmnt.getElementsByTagName("telno");

            String tel ="";

            tel = phone.item(0).getChildNodes().item(0).getNodeValue();



//밑에병원리스트추가
            personList.add(new Person(websiteList.item(0).getChildNodes().item(0)
                  .getNodeValue(), "전화번호 : " + "("
                  + tel+ ")",""));


            Log.i("map", "아무값도안뜨는데");
            Log.i("01-13",
                  calcDistance(
                        wichy,
                        wichx,
                        Double.parseDouble(lat.item(0).getChildNodes()
                              .item(0).getNodeValue()),
                        Double.parseDouble(lon.item(0).getChildNodes()
                              .item(0).getNodeValue())));

            drawMarkeraround(
                  lon.item(0).getChildNodes().item(0).getNodeValue(),
                  lat.item(0).getChildNodes().item(0).getNodeValue(),
                  websiteList.item(0).getChildNodes().item(0)
                        .getNodeValue(),
                  distance.item(0).getChildNodes().item(0)
                        .getNodeValue(), i);
private void drawMarkeraround(String x, String y, String name, String meter,int i) {


   ins = i;
   // 기존 마커 지우기
   wichx = Double.parseDouble(x);
   wichy = Double.parseDouble(y);
   Log.i("map", "drawmakretaround x : " + String.valueOf(wichx));
   Log.i("map", "drawmakretaround y : " + String.valueOf(wichy));
   LatLng currentPosition = new LatLng(wichy, wichx);

   // currentPosition 위치로 카메라 중심을 옮기고 화면 줌을 조정한다. 줌범위는 2~21, 숫자클수록 확대

   // map.moveCamera(CameraUpdateFactory.newLatLngZoom(currentPosition,
   // 17));

   // map.animateCamera(CameraUpdateFactory.zoomTo(17), 2000, null);

   // 마커 추가

   map.addMarker(new MarkerOptions()

         .position(currentPosition)

         .snippet(meter)

         .icon(BitmapDescriptorFactory
               .defaultMarker(BitmapDescriptorFactory.HUE_AZURE))

         .title(name));

   map.setOnMarkerClickListener(new OnMarkerClickListener() {
      @Override
      public boolean onMarkerClick(Marker marker) {

         Toast.makeText(getApplicationContext(), String.valueOf(ins)+"번째"+"aaa", Toast.LENGTH_SHORT).show();

         return false;
      }
익명사용자 님이 2016년 1월 27일 질문

2개의 답변

0 추천
이미 개별적으로 instance 하고 있는 걸로 보입니다.

번째 에 해당하는 ins 를 for 문 안에 넣고

final int ins = i; 식으로 해보세요
aucd29 (218,390 포인트) 님이 2016년 1월 27일 답변
답변감사합니다.
말씀하신대로
private GoogleMap map;
    protected void onPostExecute(Document doc) {

            String s = "";
            // data태그가 있는 노드를 찾아서 리스트 형태로 만들어서 반환
            NodeList nodeList = doc.getElementsByTagName("item");
            // data 태그를 가지는 노드를 찾음, 계층적인 노드 구조를 반환
            ArrayList<Person> personList = new ArrayList<Person>();
            if(nodeList.getLength()!=0){
            for (int i = 0; i < 30; i++) {
                final int ins= i;
                // 날씨 데이터를 추출
                s += "" + i + ": 위치정보: ";
                Node node = nodeList.item(i); // data엘리먼트 노드
                Element fstElmnt = (Element) node;
                NodeList nameList = fstElmnt.getElementsByTagName("addr");
                Element nameElement = (Element) nameList.item(0);
                nameList = nameElement.getChildNodes();
                s += ((Node) nameList.item(0)).getNodeValue() + " ,";

                NodeList websiteList = fstElmnt
                        .getElementsByTagName("yadmNm");
                // <wfKor>맑음</wfKor>
                s += "병원이름 = "
                        + websiteList.item(0).getChildNodes().item(0)
                                .getNodeValue() + "\n";

                NodeList lon = fstElmnt.getElementsByTagName("XPos");

                NodeList lat = fstElmnt.getElementsByTagName("YPos");

                NodeList distance = fstElmnt.getElementsByTagName("distance");

                NodeList phone = fstElmnt.getElementsByTagName("telno");

                String tel ="";

                tel = phone.item(0).getChildNodes().item(0).getNodeValue();



//밑에병원리스트추가
                personList.add(new Person(websiteList.item(0).getChildNodes().item(0)
                        .getNodeValue(), "전화번호 : " + "("
                        + tel+ ")",""));


                Log.i("map", "아무값도안뜨는데");
                Log.i("01-13",
                        calcDistance(
                                wichy,
                                wichx,
                                Double.parseDouble(lat.item(0).getChildNodes()
                                        .item(0).getNodeValue()),
                                Double.parseDouble(lon.item(0).getChildNodes()
                                        .item(0).getNodeValue())));

                drawMarkeraround(
                        lon.item(0).getChildNodes().item(0).getNodeValue(),
                        lat.item(0).getChildNodes().item(0).getNodeValue(),
                        websiteList.item(0).getChildNodes().item(0)
                                .getNodeValue(),
                        distance.item(0).getChildNodes().item(0)
                                .getNodeValue(),i);

                Log.i("map",String.valueOf(ins));
                map.setOnMarkerClickListener(new OnMarkerClickListener() {
                    @Override
                    public boolean onMarkerClick(Marker marker) {

                        Toast.makeText(getApplicationContext(), String.valueOf(ins) + "번째" + "aaa", Toast.LENGTH_SHORT).show();

                        return false;

                    }
                });
로하였지만 마커를 클릭하면 여전히 마지막값만 받습니다.
map 이 멤버 변수군요 그럼 당근 멤버 변수에 setOnMarkerClickListener 는 1번만 설정되는 것 이구요

결론적으로는 안되구요 Marker 에서 전달되는 값을 기준으로 분기 처리하셔야 합니다.

https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap

내를 보면 add listener 는 없어 보이네요
0 추천
위에 설명처럼 마커에 특정 값을 넣어 놓은다음 해당 값으로 데이터를 구해 분기처리 해서 처리 해야 할 듯합니다.

인덱스값 같은 것을 넣어두고 onMarkerClick 쪽에서 해당 Marker에서 해당 인덱스를 추출 해 그 인덱스로

데이터를 가져다 분기처리 하여 사용 처리 해야 할 듯 합니다.
lonepine (2,660 포인트) 님이 2016년 1월 28일 답변
...