得到标记其他值标记

2023-09-06 16:30:29 作者:㈠个人的王国

我坚持这个问题,我希望有人能带我到一个解决方案,我已经花了3天,直至现在。

问题

我有2个活动,活动的 A 是人口从JSON列表列表视图。活动的 B 是基于具有相同的JSON列表中,但它在地图上不上名单。

谷歌地图V2

在活动的 A 列表中有 onItemclicklistener ,当我点击它显示了另一种活动,其工作正常。这里没有问题。一切的工作原理是假设了。

在活动的 B 有地图碎片,而且它充满了LAT-LNG值从JSON列表了。因此,有10 +的标记在地图上。所以,当我点击标记,我得到的名称和地址,其工作也没关系。

这是我想要的

Excel里通过条件格式标记最大值与最小值时出现两个最大值与最小值,如何设置使唯一的被相应标记 问题如图

当我点击的项目清单上它带我到活动的 C 。另外还有一些textviews显示这几天公司是开放的。这一步完成后,它的工作很好,一切都像它应该了。

当我点击地图,有标记,所以,我有 onInfoWindowClick()。这也没关系,但我怎么可以从获得更多的价值onInfoWindowClick()

我的意思是,我可以得到(getSnippet和的getTitle的标志),但我有其他的价值在列表中,如姓名,日,ID的。这是我得到的只有.getsnippet和的getTitle通过标记。

我很卡住这个问题。 我真的很想做同样喜欢上了名单。当我在$列表P $ PSS它让所有的值,但是当IAM在地图上我只能得到标记窗口标题和摘录。荫对不起,如果我不能解释好,请随时问我,如果有,你想太多看到更多的code。

 的(HashMap的<字符串,字符串>的HashMap:contactList){
            map.addMarker(新MarkerOptions()
              .position(新经纬度(Double.valueOf(hashMap.get(TAG_LAT)),Double.valueOf(hashMap.get(TAG_LNG))))
              .title伪(hashMap.get(TAG_ADDRESS))
              是.snippet(hashMap.get(TAG_NAME)));
 

  @覆盖
公共无效onInfoWindowClick(标记标记){

    marker.getTitle();
    marker.getSnippet();
}
 

修订code

 公共类MapBased扩展AbstractMapActivity实现OnNavigationListener,OnInfoWindowClickListener
{
    私有静态最后弦乐TAG_LOCATION =LOCATION_ID;
    私有静态最后弦乐TAG_Company =的company_id;
    私有静态最后弦乐TAG_PLACE =地方;
    私有静态最后弦乐TAG_POSTAL =邮;
    私有静态最后弦乐TAG_CITY =城市;
    私有静态最后弦乐TAG_MONDAY =星期一;
    私有静态最后弦乐TAG_TUESDAY =星期二;
    私有静态最后弦乐TAG_WEDNESDAY =星期三;
    私有静态最后弦乐TAG_THURSDAY =星期四;
    私有静态最后弦乐TAG_FRIDAY =星期五;
    私有静态最后弦乐TAG_SATURDAY =星期六;
    私有静态最后弦乐TAG_SUNDAY =星期天;
    私有静态最后弦乐TAG_TYPE =类型;
    私有静态最后弦乐TAG_NOCAR =nocar;

    私有静态最后弦乐TAG_NAME =名;
    私有静态最后弦乐TAG_LAT =纬度;
    私有静态最后弦乐TAG_LNG =液化天然气;
    私有静态最后弦乐TAG_ADDRESS =地址;
    私有静态最后弦乐TAG =调试项目; //

     私人字符串一;
私人字符串B:

私人双人my_lat;
私人双人my_lng;

私有静态最后弦乐STATE_NAV =导航;
私有静态最终诠释[] MAP_TYPE_NAMES = {R.string.normal,R.string.hybrid,R.string.satellite,R.string.terrain};
私有静态最终诠释[] MAP_TYPES = {GoogleMap.MAP_TYPE_NORMAL,GoogleMap.MAP_TYPE_HYBRID,GoogleMap.MAP_TYPE_SATELLITE,
                                GoogleMap.MAP_TYPE_TERRAIN};
私人GoogleMap的地图= NULL;

@覆盖
公共无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    SQLiteDatabase DB = openOrCreateDatabase(mydb.db,Context.MODE_PRIVATE,NULL);
    db.execSQL(CREATE TABLE IF NOT EXISTS gps_kordinater(ID INTEGER PRIMARY KEY AUTOINCREMENT,纬度REAL,经度REAL););

    查询字符串=SELECT经纬度从gps_kordinater其中id =(SELECT MAX(ID)FROM gps_kordinater);
    光标光标= db.rawQuery(查询,NULL);
    如果(光标!= NULL)
    {
    cursor.moveToFirst();
     一个= cursor.getString(0);

     B = cursor.getString(1);
    }


   字符串URL =htt​​p://xxx.com;

   my_lat = Double.valueOf(一);
   my_lng = Double.valueOf(B);


   db.close();

    如果//现在启用了JB又名4.0禁用= INGEN支持
     如果(android.os.Build.VERSION.SDK_INT> 9){
          。StrictMode.ThreadPolicy政策=新StrictMode.ThreadPolicy.Builder()permitAll()建();
          StrictMode.setThreadPolicy(政策);
     }

    ArrayList的< HashMap的<字符串,字符串>> contactList =新的ArrayList< HashMap的<字符串,字符串>>();
    JSONParser jParser =新JSONParser();
    JSONArray JSON = jParser.getJSONFromUrl(URL);
    尝试 {
           的for(int i = 0; I< json.length();我++){
                JSONObject的C = json.getJSONObject(我);

                字符串纬度= c.getString(TAG_LAT);
                字符串LNG = c.getString(TAG_LNG);
                字符串名称= c.getString(TAG_NAME);
                字符串住址= c.getString(TAG_ADDRESS);

                字符串LOCATION_ID = c.getString(TAG_LOCATION);
                字符串的company_id = c.getString(TAG_Company);
                字符串的地方= c.getString(TAG_PLACE);
                字符串邮政= c.getString(TAG_POSTAL);
                字符串的城市= c.getString(TAG_CITY);
                字符串星期一= c.getString(TAG_MONDAY);
                如果(c.getString(TAG_MONDAY).isEmpty())
                    {
                        星期一=Lukket;
                    }
                其他
                    {
                        星期一= c.getString(TAG_MONDAY);
                    }

                字符串周二= c.getString(TAG_TUESDAY);
                如果(c.getString(TAG_TUESDAY).isEmpty())
                    {
                        周二=Lukket;
                    }
                其他
                    {
                        周二= c.getString(TAG_TUESDAY);
                    }

                字符串周三= c.getString(TAG_WEDNESDAY);
                如果(c.getString(TAG_WEDNESDAY).isEmpty())
                    {
                        周三=Lukket;
                    }
                其他
                    {
                        周三= c.getString(TAG_WEDNESDAY);
                    }

                字符串星期四= c.getString(TAG_THURSDAY);
                如果(c.getString(TAG_THURSDAY).isEmpty())
                    {
                        周四=Lukket;
                    }
                其他
                    {
                        周四= c.getString(TAG_THURSDAY);
                    }

                字符串周五= c.getString(TAG_FRIDAY);
                如果(c.getString(TAG_FRIDAY).isEmpty())
                    {
                        周五=Lukket;
                    }
                其他
                    {
                        周五= c.getString(TAG_FRIDAY);
                    }

                字符串周六= c.getString(TAG_SATURDAY);
                如果(c.getString(TAG_SATURDAY).isEmpty())
                    {
                        周六=Lukket;
                    }
                其他
                    {
                        周六= c.getString(TAG_SATURDAY);
                    }

                字符串星期日= c.getString(TAG_SUNDAY);
                如果(c.getString(TAG_SUNDAY).isEmpty())
                    {
                        星期日=Lukket;
                    }
                其他
                    {
                        星期日= c.getString(TAG_SUNDAY);
                    }



                字符串nocar = c.getString(TAG_NOCAR);
                字符串类型= c.getString(TAG_TYPE);


            //创建新的HashMap
            HashMap的<字符串,字符串>微管相关蛋白=新的HashMap<字符串,字符串>();

            //添加每个子节点HashMap中的key =>值

            map2.put(TAG_LAT,纬度);
            map2.put(TAG_LNG,LNG);

            map2.put(TAG_NAME,姓名);
            map2.put(TAG_ADDRESS,住址);
            map2.put(TAG_LOCATION,LOCATION_ID);
            map2.put(TAG_Company,的company_id);
            map2.put(TAG_PLACE,地点);
            map2.put(TAG_POSTAL,邮政);
            map2.put(TAG_CITY,市);
            map2.put(TAG_MONDAY,星期一);
            map2.put(TAG_TUESDAY,星期二);
            map2.put(TAG_WEDNESDAY,星期三);
            map2.put(TAG_THURSDAY,星期四);
            map2.put(TAG_FRIDAY,星期五);
            map2.put(TAG_SATURDAY,星期六);
            map2.put(TAG_SUNDAY,星期日);
            map2.put(TAG_TYPE,类型);
            map2.put(TAG_NOCAR,nocar);

            //添加HashList到ArrayList中
            contactList.add(MAP2);

             Log.d(TAG的Hashmap 1:+ MAP2);

             Log.d(TAG的Hashmap 2:+ map2.values​​());
             Log.d(TAG,数组4:+ contactList);

           }


           Log.d(TAG,排列5+ contactList);

    }赶上(JSONException E){
        e.printStackTrace();
        Log.e(JSON解析器,错误分析数据+ e.toString());

    }

    如果(readyToGo()){
        的setContentView(R.layout.map_based);

        SupportMapFragment mapFrag =
                (SupportMapFragment)getSupportFragmentManager()findFragmentById(R.id.map2)。
        initListNav();

        地图= mapFrag.getMap();

        CameraUpdate中心= CameraUpdateFactory.newLatLng(新经纬度(my_lat,my_lng));

        CameraUpdate变焦= CameraUpdateFactory.zoomTo(10);
        map.moveCamera(中心);
        map.animateCamera(变焦);

        对(HashMap的<字符串,字符串>的HashMap:contactList){
            map.addMarker(新MarkerOptions()
              .position(新经纬度(Double.valueOf(hashMap.get(TAG_LAT)),Double.valueOf(hashMap.get(TAG_LNG))))
              .title伪(hashMap.get(TAG_ADDRESS))
              是.snippet(hashMap.get(TAG_NAME))

              );
        }

        map.setInfoWindowAdapter(新PopupMapBasedAdapter(getLayoutInflater()));
        map.setOnInfoWindowClickListener(本);

    }

     按钮btn_web =(按钮)findViewById(R.id.footer_list_btn);
        btn_web.setOnClickListener(新View.OnClickListener(){
            @覆盖
                公共无效的onClick(视图查看){
                //myVib.vibrate(50);
                完();
                }
            });
}

@覆盖
公共布尔onNavigationItemSelected(INT itemPosition,长的itemId){
    map.setMapType(MAP_TYPES [itemPosition]);
    返回(真);
}

@覆盖
公共无效的onSaveInstanceState(包savedInstanceState){
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putInt(STATE_NAV,getSupportActionBar()getSelectedNavigationIndex());
}

@覆盖
公共无效onInfoWindowClick(标记标记){

    marker.getTitle();
    marker.getSnippet();
}

   @覆盖
    公共无效onRestoreInstanceState(包savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    getSupportActionBar()setSelectedNavigationItem(savedInstanceState.getInt(STATE_NAV))。
    }

    私人无效initListNav(){
ArrayList的<字符串>项目=新的ArrayList<字符串>();
ArrayAdapter<字符串> NAV = NULL;
动作条酒吧= getSupportActionBar();

    对于(整型:MAP_TYPE_NAMES){
        items.add(的getString(类型));
    }
    如果(Build.VERSION.SDK_INT> = Build.VERSION_ codeS.ICE_CREAM_SANDWICH){
        NAV =
                新的ArrayAdapter<字符串>(
                        bar.getThemedContext(),
                        android.R.layout.simple_spinner_item,
                        项);
                }
    其他 {
        NAV =
            新的ArrayAdapter<字符串>(
                    本,
                   android.R.layout.simple_spinner_item,
                   项);
                }

    nav.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    bar.setListNavigationCallbacks(NAV,这一点);
}


    }
 

解决方案

您无法将数据添加到了标记,除非你所有的把它放在片段。

所以,如果你想要更多的数据添加到您的标记,你将不得不将其存储在其链接到您的标记外部变量。

Each做标记都有一个唯一的ID。

可以使用该信息来保存映射到该ID的任何额外的数据在一个单独的变量

示例:

创建,您可以访问一个变量:

  / **
  *创建您的变量,您存储所有数据映射为标记ID,
  *让访问,你想要的。
  *此HashMap的关键是你的标志标识,该值是另一个地图与额外的数据
  * /
 HashMap的<字符串的HashMap> extraMarkerInfo =新的HashMap<字符串的HashMap>();
 

选项1更改您的标记code使你增加额外的数据,这个​​变量

 的(HashMap的<字符串,字符串>的HashMap:contactList){
     //创建标记正常人一样,没有什么变化
     标记标记= map.addMarker(新MarkerOptions()
         .position(新经纬度(Double.valueOf(hashMap.get(TAG_LAT)),Double.valueOf(hashMap.get(TAG_LNG))))
         .title伪(hashMap.get(TAG_ADDRESS))
         是.snippet(hashMap.get(TAG_NAME)));

     //当你创建的标记,你保存在另一个变量,从您的JSON额外的数据(HashMap的为例)
     HashMap的<字符串,字符串>数据=新的HashMap<字符串,字符串>();

     data.put(TAG_LOCATION,hashMap.get(TAG_LOCATION));
     data.put(TAG_Company,hashMap.get(TAG_Company));
     data.put(TAG_PLACE,hashMap.get(TAG_PLACE));
     data.put(TAG_POSTAL,hashMap.get(TAG_POSTAL));
     data.put(TAG_CITY,hashMap.get(TAG_CITY));
     data.put(TAG_MONDAY,hashMap.get(TAG_MONDAY));
     data.put(TAG_TUESDAY,hashMap.get(TAG_TUESDAY));
     data.put(TAG_WEDNESDAY,hashMap.get(TAG_WEDNESDAY));
     data.put(TAG_THURSDAY,hashMap.get(TAG_THURSDAY));
     data.put(TAG_FRIDAY,hashMap.get(TAG_FRIDAY));
     data.put(TAG_SATURDAY,hashMap.get(TAG_SATURDAY));
     data.put(TAG_SUNDAY,hashMap.get(TAG_SUNDAY));
     data.put(TAG_TYPE,hashMap.get(TAG_TYPE));
     data.put(TAG_NOCAR,hashMap.get(TAG_NOCAR));

     //保存此标记数据在previously作出的HashMap映射为标记ID。所以,你可以拿回来基于标记ID
     extraMarkerInfo.put(marker.getId(),数据);

}
 

容易的选择2只需保存整个地图中的外部变量

 的(HashMap的<字符串,字符串>的HashMap:contactList){
     //创建标记正常人一样,没有什么变化
     标记标记= map.addMarker(新MarkerOptions()
         .position(新经纬度(Double.valueOf(hashMap.get(TAG_LAT)),Double.valueOf(hashMap.get(TAG_LNG))))
         .title伪(hashMap.get(TAG_ADDRESS))
         是.snippet(hashMap.get(TAG_NAME)));

     //只需保存整个JSON散列映射成外部变量
     extraMarkerInfo.put(marker.getId(),HashMap的);

}
 

现在,您可以访问,只要你想要的extraMarkerInfo,你知道的标记ID使用的getID()

  @覆盖
公共无效onInfoWindowClick(标记标记){

    字符串标题= marker.getTitle();
    字符串片段= marker.getSnippet();

    //获取具有标记ID额外的数据
    HashMap的<字符串,字符串> marker_data = extraMarkerInfo.get(marker.getId());

    //获取从地图数据
    字符串位置= marker_data.get(TAG_LOCATION);
    字符串公司= marker_data.get(TAG_Company);
    字符串的地方= marker_data.get(TAG_PLACE);
    // ..等等等等
}
 

这是使用HashMaps这样只是一个小例子,但你可以使用任何你preFER不同的解决方案。

I'm stuck with this problem and I hope someone can lead me to a solution, I have spent 3 days on it until now..

The Problem

I have 2 activities, activity A is a listview populated from a JSON list. Activity B is Google maps v2 based with the same json list but its on Map not on list.

on activity A list there is onItemclicklistener and when I click on it shows another activity and its works fine. no problem here. everything works like is supposed too.

on Activity B there is map fragment, and it's filled with lat-lng values from a JSON list too. So there is 10 +markers on map. So when I click on marker, I am getting the name and address and its working fine too.

This what I Want

When I clicking the item on list it taking me to activity C. and there are some textviews to show which days the company are open. this step is done, its working fine and everything like it supposed too.

When I click on Map, there are markers, So I have onInfoWindowClick(). It's fine too but how i can get more values from the onInfoWindowClick()?

What i mean is, i can get (getSnippet and getTitle from marker) But I have other values in the list, like name, days, id's. this what i getting is only .getsnippet and getTitle through the marker.

I am very stuck with this issue. I really want to do the same like on the List. When I press on list its getting all values but when iam on Maps i can only get marker window with Title and Snippet. Iam sorry if I couldnt explain good, pls feel free to ask me if there is more code you want too see.

                for (HashMap<String, String> hashMap : contactList) {
            map.addMarker(new MarkerOptions()
              .position(new LatLng(Double.valueOf(hashMap.get(TAG_LAT)) , Double.valueOf(hashMap.get(TAG_LNG))))
              .title(hashMap.get(TAG_ADDRESS))
              .snippet(hashMap.get(TAG_NAME)) );

@Override
public void onInfoWindowClick(Marker marker) {

    marker.getTitle();
    marker.getSnippet(); 
}

UPDATED CODE

    public class MapBased extends AbstractMapActivity implements OnNavigationListener,OnInfoWindowClickListener
{
    private static final String TAG_Location = "location_id";
    private static final String TAG_Company = "company_id";
    private static final String TAG_PLACE = "place";
    private static final String TAG_POSTAL = "postal";
    private static final String TAG_CITY = "city";
    private static final String TAG_MONDAY = "monday";
    private static final String TAG_TUESDAY = "tuesday";
    private static final String TAG_WEDNESDAY = "wednesday";
    private static final String TAG_THURSDAY = "thursday";
    private static final String TAG_FRIDAY = "friday";
    private static final String TAG_SATURDAY = "saturday";
    private static final String TAG_SUNDAY = "sunday";
    private static final String TAG_TYPE = "type";
    private static final String TAG_NOCAR = "nocar";

    private static final String TAG_NAME = "name";
    private static final String TAG_LAT = "lat";
    private static final String TAG_LNG = "lng";
    private static final String TAG_ADDRESS = "address";
    private static final String TAG = "Debug of Project"; // 

     private String a;
private String b;

private double my_lat;
private double my_lng;

private static final String STATE_NAV="nav";
private static final int[] MAP_TYPE_NAMES= { R.string.normal, R.string.hybrid, R.string.satellite, R.string.terrain };
private static final int[] MAP_TYPES= { GoogleMap.MAP_TYPE_NORMAL, GoogleMap.MAP_TYPE_HYBRID, GoogleMap.MAP_TYPE_SATELLITE,
                                GoogleMap.MAP_TYPE_TERRAIN };
private GoogleMap map=null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SQLiteDatabase db = openOrCreateDatabase("mydb.db", Context.MODE_PRIVATE, null);
    db.execSQL("CREATE TABLE IF NOT EXISTS gps_kordinater (ID INTEGER PRIMARY KEY AUTOINCREMENT, Latitude REAL, Longitude REAL);");

    String query = "SELECT Latitude,Longitude FROM gps_kordinater WHERE Id = (SELECT MAX(Id) FROM gps_kordinater)";
    Cursor cursor = db.rawQuery(query, null);
    if(cursor != null)
    {
    cursor.moveToFirst();
     a = cursor.getString(0);

     b = cursor.getString(1);
    }


   String url = "http://xxx.com";

   my_lat = Double.valueOf(a);  
   my_lng = Double.valueOf(b);


   db.close();

    // now enabled if disabled = ingen support for jb aka 4.0
     if (android.os.Build.VERSION.SDK_INT > 9) {
          StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
          StrictMode.setThreadPolicy(policy);
     }

    ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
    JSONParser jParser = new JSONParser();
    JSONArray json = jParser.getJSONFromUrl(url);
    try {
           for(int i = 0; i < json.length(); i++){
                JSONObject c = json.getJSONObject(i);

                String lat = c.getString(TAG_LAT);
                String lng = c.getString(TAG_LNG);
                String name = c.getString(TAG_NAME);
                String adresse = c.getString(TAG_ADDRESS);

                String location_id = c.getString(TAG_Location);
                String company_id = c.getString(TAG_Company);
                String place = c.getString(TAG_PLACE) ; 
                String postal = c.getString(TAG_POSTAL);
                String city = c.getString(TAG_CITY);
                String monday = c.getString(TAG_MONDAY);
                if(c.getString(TAG_MONDAY).isEmpty())
                    {
                        monday="Lukket";
                    }
                else
                    {
                        monday=c.getString(TAG_MONDAY);
                    }

                String tuesday = c.getString(TAG_TUESDAY);
                if(c.getString(TAG_TUESDAY).isEmpty())
                    {
                        tuesday="Lukket";
                    }
                else
                    {
                        tuesday=c.getString(TAG_TUESDAY);
                    }

                String wednesday = c.getString(TAG_WEDNESDAY);  
                if(c.getString(TAG_WEDNESDAY).isEmpty())
                    {
                        wednesday="Lukket";
                    }
                else
                    {
                        wednesday=c.getString(TAG_WEDNESDAY);
                    }

                String thursday = c.getString(TAG_THURSDAY);
                if(c.getString(TAG_THURSDAY).isEmpty())
                    {
                        thursday="Lukket";
                    }
                else
                    {
                        thursday=c.getString(TAG_THURSDAY);
                    }

                String friday = c.getString(TAG_FRIDAY);
                if(c.getString(TAG_FRIDAY).isEmpty())
                    {
                        friday="Lukket";
                    }
                else
                    {
                        friday=c.getString(TAG_FRIDAY);
                    }

                String saturday = c.getString(TAG_SATURDAY);
                if(c.getString(TAG_SATURDAY).isEmpty())
                    {
                        saturday="Lukket";
                    }
                else
                    {
                        saturday=c.getString(TAG_SATURDAY);
                    }   

                String sunday=c.getString(TAG_SUNDAY);
                if(c.getString(TAG_SUNDAY).isEmpty())
                    {
                        sunday="Lukket";
                    }
                else
                    {
                        sunday=c.getString(TAG_SUNDAY);
                    }



                String nocar = c.getString(TAG_NOCAR);
                String type = c.getString(TAG_TYPE);


            // creating new HashMap
            HashMap<String, String> map2 = new HashMap<String, String>();

            // adding each child node to HashMap key => value

            map2.put(TAG_LAT, lat);
            map2.put(TAG_LNG, lng);

            map2.put(TAG_NAME, name);
            map2.put(TAG_ADDRESS, adresse);
            map2.put(TAG_Location, location_id);
            map2.put(TAG_Company, company_id);
            map2.put(TAG_PLACE, place);
            map2.put(TAG_POSTAL, postal);
            map2.put(TAG_CITY, city);
            map2.put(TAG_MONDAY, monday);
            map2.put(TAG_TUESDAY, tuesday);
            map2.put(TAG_WEDNESDAY, wednesday);
            map2.put(TAG_THURSDAY, thursday);
            map2.put(TAG_FRIDAY, friday);
            map2.put(TAG_SATURDAY, saturday);
            map2.put(TAG_SUNDAY, sunday);
            map2.put(TAG_TYPE, type);
            map2.put(TAG_NOCAR, nocar);

            // adding HashList to ArrayList
            contactList.add(map2);

             Log.d(TAG, "Hashmap 1: " + map2); 

             Log.d(TAG, "Hashmap 2: " + map2.values()); 
             Log.d(TAG, "array 4: " + contactList); 

           }


           Log.d(TAG, "array 5: " + contactList); 

    } catch (JSONException e) {
        e.printStackTrace();
        Log.e("JSON Parser", "Error parsing data " + e.toString());

    }

    if (readyToGo()) {
        setContentView(R.layout.map_based);

        SupportMapFragment mapFrag=
                (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map2);
        initListNav();

        map=mapFrag.getMap();

        CameraUpdate center= CameraUpdateFactory.newLatLng(new LatLng(my_lat , my_lng));

        CameraUpdate zoom=CameraUpdateFactory.zoomTo(10);
        map.moveCamera(center);
        map.animateCamera(zoom);

        for (HashMap<String, String> hashMap : contactList) {
            map.addMarker(new MarkerOptions()
              .position(new LatLng(Double.valueOf(hashMap.get(TAG_LAT)) , Double.valueOf(hashMap.get(TAG_LNG))))
              .title(hashMap.get(TAG_ADDRESS))
              .snippet(hashMap.get(TAG_NAME))

              );
        }

        map.setInfoWindowAdapter(new PopupMapBasedAdapter(getLayoutInflater()));
        map.setOnInfoWindowClickListener(this);

    }

     Button btn_web = (Button) findViewById(R.id.footer_list_btn);
        btn_web.setOnClickListener(new View.OnClickListener() {
            @Override
                public void onClick(View view) {
                //myVib.vibrate(50);
                finish();
                }
            });
}

@Override
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
    map.setMapType(MAP_TYPES[itemPosition]);
    return(true);
}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putInt(STATE_NAV,getSupportActionBar().getSelectedNavigationIndex());
}

@Override
public void onInfoWindowClick(Marker marker) {

    marker.getTitle();
    marker.getSnippet(); 
}

   @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);  
    getSupportActionBar().setSelectedNavigationItem(savedInstanceState.getInt(STATE_NAV));
    }

    private void initListNav() {
ArrayList<String> items=new ArrayList<String>();
ArrayAdapter<String> nav=null;
ActionBar bar=getSupportActionBar();

    for (int type : MAP_TYPE_NAMES) {
        items.add(getString(type));
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        nav=
                new ArrayAdapter<String>(
                        bar.getThemedContext(),
                        android.R.layout.simple_spinner_item,
                        items);
                }
    else {
        nav=
            new ArrayAdapter<String>( 
                    this,
                   android.R.layout.simple_spinner_item,
                   items);
                }

    nav.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    bar.setListNavigationCallbacks(nav, this);  
}


    }

解决方案

You cannot add anymore data to the marker, unless you all put it in the snippet.

So if you want to add more data to your marker, you will have to store it in an external variable which is linked to your marker.

Each made marker has an unique ID.

You can use this information to save any additional data mapped to this ID in a separate variable.

Example:

Create a variable you can access:

 /**
  * Create your variable where you store all your data mapped to the marker ID, 
  * make it accessible where you want.
  * The key of this hashmap is your marker ID, the value is another Map with extra data
  */
 HashMap<String, HashMap> extraMarkerInfo = new HashMap<String, HashMap>();

OPTION 1 Change your marker code so you add extra data to this variable

for (HashMap<String, String> hashMap : contactList) {
     // Create your marker like normal, nothing changes
     Marker marker = map.addMarker(new MarkerOptions()
         .position(new LatLng(Double.valueOf(hashMap.get(TAG_LAT)) , Double.valueOf(hashMap.get(TAG_LNG))))
         .title(hashMap.get(TAG_ADDRESS))
         .snippet(hashMap.get(TAG_NAME)));

     // When you created the marker you store the extra data from your JSON in another variable (HashMap for example)
     HashMap<String, String> data = new HashMap<String, String>();

     data.put(TAG_Location,hashMap.get(TAG_Location));
     data.put(TAG_Company,hashMap.get(TAG_Company));
     data.put(TAG_PLACE,hashMap.get(TAG_PLACE));
     data.put(TAG_POSTAL,hashMap.get(TAG_POSTAL));
     data.put(TAG_CITY,hashMap.get(TAG_CITY));
     data.put(TAG_MONDAY,hashMap.get(TAG_MONDAY));
     data.put(TAG_TUESDAY,hashMap.get(TAG_TUESDAY));
     data.put(TAG_WEDNESDAY,hashMap.get(TAG_WEDNESDAY));
     data.put(TAG_THURSDAY,hashMap.get(TAG_THURSDAY));
     data.put(TAG_FRIDAY,hashMap.get(TAG_FRIDAY));
     data.put(TAG_SATURDAY,hashMap.get(TAG_SATURDAY));
     data.put(TAG_SUNDAY,hashMap.get(TAG_SUNDAY));
     data.put(TAG_TYPE,hashMap.get(TAG_TYPE));
     data.put(TAG_NOCAR,hashMap.get(TAG_NOCAR));

     // Save this marker data in your previously made HashMap mapped to the marker ID. So you can get it back based on the marker ID
     extraMarkerInfo.put(marker.getId(),data);

}

EASY OPTION 2 Just save the entire map in the external variable

for (HashMap<String, String> hashMap : contactList) {
     // Create your marker like normal, nothing changes
     Marker marker = map.addMarker(new MarkerOptions()
         .position(new LatLng(Double.valueOf(hashMap.get(TAG_LAT)) , Double.valueOf(hashMap.get(TAG_LNG))))
         .title(hashMap.get(TAG_ADDRESS))
         .snippet(hashMap.get(TAG_NAME)));

     // Just save the entire json hashmap into the external variable
     extraMarkerInfo.put(marker.getId(),hashMap);

}

Now you can access that extraMarkerInfo whenever you want, you know the Marker id by using getID().

@Override
public void onInfoWindowClick(Marker marker) {

    String title = marker.getTitle();
    String snippet = marker.getSnippet(); 

    // Get extra data with marker ID
    HashMap<String, String> marker_data = extraMarkerInfo.get(marker.getId());

    // Getting the data from Map
    String location = marker_data.get(TAG_Location);
    String company = marker_data.get(TAG_Company);
    String place = marker_data.get(TAG_PLACE);
    //.. etc etc
}

This is just a small example using HashMaps, but you can use different solutions whatever you prefer.