将点击监听器分配到信息窗口,无法导航到Google Maps V2网页

时间:2015-03-27 14:20:48

标签: android google-maps-markers google-maps-api-2

问题是我无法点击网址" www.news.com"显示在标记的自定义信息窗口内的andoid map v2上。 在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.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"/>

仍存在问题..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链接。我该如何实现呢?

更新代码:

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);
    }
    });

1 个答案:

答案 0 :(得分:1)

信息窗口不是实时视图,而是视图在地图上呈现为图像。因此,视图仅响应单击作为整个视图。对于您的情况,我认为您必须使用GoogleMap.setOnInfoWindowClickListener,然后检索要启动的Web字符串。


[<强> 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时打开不同的Marker,那么一个解决方案就是将Activity信息放到{{} 1}} Marker为:

Snippet

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

时获取它
Marker