2017-10-20 9 views
0

나는 "MarkerOptions"이 (가령, 이름, 이메일, 주소 등) 다른 필드를 가지고있는 db (MySQL)에 저장된 마커를 표시하는지도를 가지고 있습니다. 오직 ".tittle", ". snippet"을 사용하고 싶습니다. 내가 부착하고 싶은 필드가 빠져 있습니다. 이제는 원하는 모든 필드를 보여주기 위해 사용자 정의 정보 윈도우를 사용해야 만합니다. 내가 어떻게 할 수 있니? 내 코드 :MySQL과 함께 사용자 정의 INFOWINDOW 사용하기

홈페이지 :

ArrayList<HashMap<String, String>> location = null; 
    String url = "http://appserver.eco.mx/movil/getLanLong.php"; 
    try { 

     JSONArray data = new JSONArray(getHttpGet(url)); 
     location = new ArrayList<HashMap<String, String>>(); 
     HashMap<String, String> map; 

     for(int i = 0; i < data.length(); i++){ 
      JSONObject c = data.getJSONObject(i); 
      map = new HashMap<String, String>(); 
      map.put("id", c.getString("id")); 
      map.put("campo_latitud", c.getString("campo_latitud")); 
      map.put("campo_longitud", c.getString("campo_longitud")); 
      map.put("campo_categoria", c.getString("campo_categoria")); 
      map.put("campo_estado", c.getString("campo_estado")); 
      location.add(map); 
     } 
    } catch (JSONException e) { 
// TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    String campouno = ""; 
    if(!TextUtils.isEmpty(campouno)){ 
     double campo_latitud = Double.parseDouble(campouno); 
    } 
    //campo_latitud = Double.parseDouble(location.get(0).get("Latitude").toString()); 
    String campodos = ""; 
    if(!TextUtils.isEmpty(campodos)){ 
     double campo_longitud = Double.parseDouble(campodos); 
    } 

    for (int i = 0; i < location.size(); i++) { 
     if(!TextUtils.isEmpty(location.get(i).get("campo_latitud").toString())&&!TextUtils.isEmpty(location.get(i).get("campo_longitud").toString())) { 
      campo_latitud = Double.parseDouble(location.get(i).get("campo_latitud").toString()); 
      campo_longitud = Double.parseDouble(location.get(i).get("campo_longitud").toString()); 
     } 

String name = location.get(i).get("campo_categoria").toString(); 
     //String des = location.get(i).get("campo_descripcion").toString(); 

     if(location.get(i).get("campo_categoria").toString().equals("Obras publicas")){ 
      //System.out.println(location.get(i).get("campo_descripcion").toString()); 
      googleMap.addMarker(new MarkerOptions().position(new LatLng(campo_latitud, campo_longitud)).title(name).icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_op))); 
     } 
    }} 

XML :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:background="@android:color/white"> 

<TextView 
    android:id="@+id/info_window_nombre" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:paddingLeft="5dp" 
    android:text="Carlo Estrada Solano" /> 

<TextView 
    android:id="@+id/info_window_placas" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textStyle="bold" 
    android:textSize="20sp" 
    android:layout_below="@id/info_window_nombre" 
    android:paddingLeft="5dp" 
    android:text="Placas: SX5487" /> 

<TextView 
    android:id="@+id/info_window_estado" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/info_window_placas" 
    android:paddingLeft="5dp" 
    android:text="Estado: Activo" /> 

</LinearLayout> 

개의 InfoWindow 클래스 :

public class AdaptadorInforWindow implements GoogleMap.InfoWindowAdapter { 

private static final String TAG = "CustomInfoWindowAdapter"; 
private LayoutInflater inflater; 

public AdaptadorInforWindow(LayoutInflater inflater){ 
    this.inflater = inflater; 
} 

@Override 
public View getInfoWindow(Marker marker) { 
    //Carga layout personalizado. 
    View v = inflater.inflate(R.layout.infowindow_layout, null); 
    String[] info = marker.getTitle().split("&"); 
    String url = marker.getSnippet(); 
    ((TextView)v.findViewById(R.id.info_window_nombre)).setText("Lina Cortés"); 
    ((TextView)v.findViewById(R.id.info_window_placas)).setText("Placas: SRX32"); 
    ((TextView)v.findViewById(R.id.info_window_estado)).setText("Estado: Activo"); 

    return v; 
} 

@Override 
public View getInfoContents(Marker marker) { 
    return null; 
    } 
} 

설정 GoogleMap으로 :

myGoogleMap.setInfoWindowAdapter(new CustomInfoWindowAdapter(LayoutInflater.from(getActivity()))); 
+0

코드가 정상적으로 보입니다. 어떤 문제? –

+0

나는 그것이 잘 작동하지만 내가 원하는 것은하지 않는다는 것을 의미한다. 나는 costum infowindow를 사용하고 싶다. 그러나 XML에서 나는 이름, 주소 등을 적는다. 나는 이름과 주소를 데이터베이스에서 가져오고 싶다. costum infowindow @LalitSinghFauzdar로 설정하십시오. – Armando

답변

0

그래서 방금 내 앱에 CustomInfoWindow을 만들었습니다. 다음은이를 달성하는 방법입니다.

먼저 당신의 마커와 관련된 모든 데이터에 액세스 할 데이터베이스 파일에 메서드를 생성하고 다음과 같이 코드는 다음과 같습니다

Cursor getDetails(Marker marker){    
      db = getReadableDatabase();   
      String query = "select Name, Email, Address from YourTableName where Name = '"+marker.getTitle()+"';"; 
      return db.rawQuery(query,null); 
    } 

그런 다음 조정할 AdaptadorInforWindow의 코드는 다음과 같이

YourDatabaseClass db = new YourDatabaseClass(context); 
    Cursor c = db.getDetails(); //Method you'll create in database class 
    ((TextView)v.findViewById(R.id.info_window_name)).setText(c.getString(0)); 
    ((TextView)v.findViewById(R.id.info_window_email)).setText(c.getString(1)); 
    ((TextView)v.findViewById(R.id.info_window_address)).setText(c.getString(2)); 
    c.close(); 

이름, 이메일 및 주소 값을 저장하기 위해 Text/String 데이터 유형을 사용했기 때문에 getString이 사용되었습니다. 데이터 유형이 변경되면 int에 대해 c.getInt(index)과 같은 적절한 메소드를 사용해야한다는 점을 기억하십시오.

또한 색인 0,1,2는 검색어 : 이름 이메일 주소와 동일합니다.

이렇게하면 CustomInfoWindow에 데이터가 표시됩니다.

동일한 기능이 내 제품에서 훌륭하게 작동하며이 기능이 작동 할 것이라고 확신합니다.

+0

@Armando 여기에 필요한 대답이 있습니다. –

+0

이 "커서 getDetails (마커 마커) { db = getReadableDatabase(); String query ="Name = ' "+ marker.getTitle() +"'; ";을 YourTableName에서 이름, 전자 메일, 주소를 선택하십시오. return db.rawQuery (query, null); } "PHP 파일에 있습니까? – Armando

+0

아하 !!! 나는 PHP를 사용하고 있는지 몰랐다. @Armando하지만 현재 마커의 세부 정보를 얻기 위해 사용자 정의 할 수있다. 그렇지 않습니까? –

1

마커 키를 사용하여 해시 맵에 마커를 저장합니다. 그런 다음 hashmap 객체를 사용하여 Custom infowindow를 사용하여 다른 정보를 검색합니다. 마커를 클릭하면 관련 정보가 표시됩니다.

또는이 비디오를 와드의 8 시부 터 시청할 수 있습니다. Click Here

+0

어떻게 마커 키를 사용할 수 있습니까? 동영상을 보았지만 데이터베이스에서 값을 가져 오는 위치를 확인하지 못했습니다. – Armando

+1

https://stackoverflow.com/questions/16496715/how-to-know-which-marker-was-clicked-on-google- maps-v2-for-android –

+0

내가 언급 한 것을 할 수 있었지만, yur 정보가 도움이되었습니다. 감사합니다! – Armando