【问题标题】:Call another fragment page when clicking google map infowindow单击谷歌地图信息窗口时调用另一个片段页面
【发布时间】:2015-12-03 14:34:34
【问题描述】:

我正在使用改造来在线获取数据。但是我找不到任何解决问题的方法。我想调用另一个片段并显示有关我单击的标记的更多详细信息,并将这些值传递给另一个片段。有人可以帮我解决这个问题。非常感谢任何帮助和解决方案。

MapFragment.jav

 RestAdapter adapter = new RestAdapter.Builder()
            .setEndpoint(getString(R.string.fine_dinings))
            .build();

    RestaurantPlacesApiInterface restaurantPlacesApiInterface =
            adapter.create(RestaurantPlacesApiInterface.class);

    restaurantPlacesApiInterface.getStreams(new Callback<List<RestaurantPlaces>>() {
        @Override
        public void success(List<RestaurantPlaces> restaurantPlaces, Response response) {
            for (RestaurantPlaces restaurantPlace : restaurantPlaces){
                MarkerOptions options = new MarkerOptions().position(new LatLng(restaurantPlace.getLatitude(),
                        restaurantPlace.getLongitude()));
                options.title(restaurantPlace.getName());
                options.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
                getMap().addMarker(options);
            }
        }

        @Override
        public void failure(RetrofitError error) {

        }
    });

}

【问题讨论】:

    标签: android google-maps android-fragments android-intent retrofit


    【解决方案1】:

    你需要使用这个:

    @Override
    public boolean onMarkerClick(Marker marker) {
        // call fragment and pass data.
        return false; 
    }
    

    如果您返回 false,则不会消耗点击。 如果您需要帮助来实现这一点,请告诉我,这相当简单。

    这是一个快速示例,请更改名称以匹配您自己的代码:

    public class MapActivity implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener {
        private GoogleMap mGoogleMap;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_map);
    
            initMap();
        }
    
        public void initMap() {
            MapFragment map = (MapFragment) getFragmentManager().findFragmentById(R.id.mapFragment);
            map.getMapAsync(this);
        }
    
        @Override
        public void onMapReady(GoogleMap googleMap) {
            try {
                if (googleMap != null) {
                    mGoogleMap = googleMap;
                    mGoogleMap.setOnMarkerClickListener(this);              
                    mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    
                    // Now make your retrofit call
                }
            } catch (Exception e) {
                e.printStackTrace();
                Log.e("ERROR", "GOOGLE MAPS NOT LOADED");
            }
        }
    
        @Override
        public boolean onMarkerClick(Marker marker) {
            Bundle bundle = new Bundle();
            bundle.putString("myString", "value");
            // set Fragment class Arguments
            MyFragment myFragment= new MyFragment();
            myFragment.setArguments(bundle);
            // launch fragment
    
            return false; 
        }
    }
    

    【讨论】:

    • 谢谢。那么我需要在 getStreams 方法中声明 onMarkerClick 吗?你能举个例子来传递数据吗?我需要在这里使用 putExtra 和 getExtra 吗?
    • onMarkerClick 需要在 getStreams 之外并实现。我会为你写一个小例子。一秒
    • 哇,这么快,非常感谢。我会尝试一下,如果我还有其他问题,请告诉您。我得到了你的代码背后的逻辑。欣赏它。
    • 没问题,如果对您有帮助,请确保您投票并接受我的回答:)
    • 美好的一天,我已经尝试过你的代码,但似乎有些东西不起作用。我用 AppcompatActivity 扩展了 MapActivity,因为如果我不扩展它会出错。那么你指的是什么 MapFragment 谷歌的 MapFragment?当我启动应用程序时,我收到 map.getAsync 的 initMap 错误。我在做正确的事吗?。
    【解决方案2】:

    最好在片段中使用接口并在(使用 RestAdapter 的活动)中实现该接口

    【讨论】:

    • 谢谢。但是怎么做?你能提供样品吗?谢谢。
    • @spike_stack 谢谢。顺便说一句,它现在正在工作。但是,我如何获取值并将其传递给另一个片段。我无法完全理解 putString 方法。我怎么知道我传递了正确的参数?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2011-05-21
    • 2014-09-04
    • 2016-08-26
    • 1970-01-01
    • 2016-07-10
    相关资源
    最近更新 更多