2015-03-27 1 views
0

Проблема в том, что я не могу щелкнуть по URL-адресу «www.news.com», отображаемому на andoid map v2 внутри пользовательского содержимого маркера. В файле макета XML У меня есть:Назначить прослушиватель кликов в информационном окне, не удается перейти на веб-страницу Google Maps V2

<TextView 
    android:id="@+id/web" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:autoLink="web" 
    android:background="#ADD8E6" 
    android:text="www.google.gr" 
    android:linksClickable="true"/> 

В Java файл активности у меня есть:

mMap.setInfoWindowAdapter(new InfoWindowAdapter() { 

      // Use default InfoWindow frame 
      @Override 
      public View getInfoWindow(Marker marker) { 
       return null; 
      } 

      // Defines the contents of the InfoWindow 
      @Override 
      public View getInfoContents(Marker marker) { 

       // Getting view from the layout file info_window_layout 
       View v = getLayoutInflater().inflate(R.layout.infowindow_layout, null); 

       TextView tvTitle = (TextView) v.findViewById(R.id.title); 
       tvTitle.setText(marker.getTitle()); 
       TextView tvSnippet = (TextView) v.findViewById(R.id.snippet); 
       tvSnippet.setText(marker.getSnippet()); 

       // URL 
       final TextView tvURL =(TextView) v.findViewById(R.id.web); 
       tvURL.setText("www.news.com"); 
       Linkify.addLinks(tvURL, Linkify.WEB_URLS); 
       // URL 

Ссылка правильно показывает синим цветом и подчеркнуть, но я нашел его просто мертвой ссылке. Ничего не происходит, если мы попытаемся щелкнуть его. Что мне нужно сделать, чтобы активировать ссылку?

Новый код вставляется в Java файл:

mMap.setInfoWindowAdapter(new InfoWindowAdapter() { 

     // Use default InfoWindow frame 
     @Override 
     public View getInfoWindow(Marker marker) { 
      return null; 
     } 

     // Defines the contents of the InfoWindow 
     @Override 
     public View getInfoContents(Marker marker) { 

      // Getting view from the layout file info_window_layout 
      View v = getLayoutInflater().inflate(R.layout.infowindow_layout, null); 

      TextView tvTitle = (TextView) v.findViewById(R.id.title); 
      tvTitle.setText(marker.getTitle()); 
      TextView tvSnippet = (TextView) v.findViewById(R.id.snippet); 
      tvSnippet.setText(marker.getSnippet()); 

      // URL 

       final TextView tvWeb =(TextView) v.findViewById(R.id.web); 
       tvWeb.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
         Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.news.com")); 
         startActivity(viewIntent); 
        } 
       }); 

XML используется тот же:

<TextView 
    android:id="@+id/web" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:autoLink="web" 
    android:background="#ADD8E6" 
    android:text="www.news.com" 
    android:linksClickable="true"/> 

Еще проблема ссылка exists..URL не активен, я не могу открыть браузер.

Теперь URL-адрес открывается в мобильный браузер, когда я нажимаю на пользовательскую инфо-позицию.

mMap.addMarker(new MarkerOptions().position(new LatLng(39.686286, 19.838443)).title("Hi").snippet("Name, Surname, phone: 1093595, website: www.news.com").icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon))); 
    mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() { 
     @Override 
     public void onInfoWindowClick(Marker marker) { 
      Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.news.com")); 
      startActivity(viewIntent); 


     } 
    }); 

Но у меня есть около 300 маркеров, и для каждого маркера я хочу открыть отдельную ссылку URL. Как я могу это реализовать?

UPDATE КОД:

mMap.addMarker(new MarkerOptions().position(new LatLng(36.84449, 22.99999)).title("KALOGRIA").snippet("Name: Messinia \nSurname: Stoupa \nphone: +99999999 \nwebsite: http://www.news.com/").icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon))); 


mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() 
    { 
    @Override 
    public void onInfoWindowClick(Marker marker) 
    { 
     //String webUrl = marker.getSnippet(); 
     String snippetStr = marker.getSnippet(); 
     String webUrl = snippetStr.substring(snippetStr.lastIndexOf("website:") + 1); 
     Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webUrl)); 
     startActivity(viewIntent); 
    } 
    }); 
+0

Hack для форсирования информационного окна вид живучести/интерактивности: https: //gist.github.com/corsair992/8313269 – corsair992

ответ

0

Информационное окно не живой вид, а вид отображается в виде изображения на карте. Таким образом, просмотр только ответа кликнет как целое представление. Для вашего случая я предполагаю, что вам нужно использовать GoogleMap.setOnInfoWindowClickListener, а затем восстановить веб-строку для запуска.


[Update1]

Может быть, вы могли бы попробовать этот способ:

mMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() 
{ 

      @Override 
      public void onInfoWindowClick(Marker thisMarker) 
      { 

       Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.news.com")); 
       startActivity(viewIntent);     

      } 

}); 


[UPDATE2]

В случае у вас есть несколько Marker с, и хотите открыть разные Activity при нажатии каждого, то одно решение поставить Activity Информация для Marker «s Snippet как:

Marker marker = mMap.addMarker(new MarkerOptions() 
.position(...) 
.title(...) 
.snippet("http://www.news.com"); //put your activity info here 

, а затем получить его, когда нажмите Marker:

@Override 
public void onInfoWindowClick(Marker thisMarker) 
{ 
     ... ... 
    String snippetStr = thisMarker.getSnippet(); 
    String webUrl = snippetStr.substring(snippetStr.lastIndexOf("website:") + 1); 
    Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(webUrl)); 
    startActivity(viewIntent); 
} 
+0

@Thanos, как идет ваша проблема? – Xcihnegn

+0

У меня все еще есть проблема со ссылкой. Он не доступен для кликов. Пожалуйста, проверьте мой новый код выше и, пожалуйста, помогите мне решить эту проблему. – Thanos

+0

новый код находится под «Новый код, вставленный внутри java-файла:» выше – Thanos