java - getMap() 出错?

标签 java android

我正在尝试使用堆栈溢出答案之一的交互式信息窗口。

链接如下:

interactive infowindow

但是我在代码中使用 getMap() 时遇到错误。虽然我尝试使用 getMapAsync 但无法解决问题。请尽快帮助我。如果有任何新代码可用于带按钮的交互式信息窗口,请分享代码。

    public class MainActivity extends Activity {    
    private ViewGroup infoWindow;
    private TextView infoTitle;
    private TextView infoSnippet;
    private Button infoButton;
    private OnInfoWindowElemTouchListener infoButtonListener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.map);
        final MapWrapperLayout mapWrapperLayout = (MapWrapperLayout)findViewById(R.id.map_relative_layout);
        final GoogleMap map = mapFragment.getMap();

        // MapWrapperLayout initialization
        // 39 - default marker height
        // 20 - offset between the default InfoWindow bottom edge and it's content bottom edge 
        mapWrapperLayout.init(map, getPixelsFromDp(this, 39 + 20)); 

        // We want to reuse the info window for all the markers, 
        // so let's create only one class member instance
        this.infoWindow = (ViewGroup)getLayoutInflater().inflate(R.layout.info_window, null);
        this.infoTitle = (TextView)infoWindow.findViewById(R.id.title);
        this.infoSnippet = (TextView)infoWindow.findViewById(R.id.snippet);
        this.infoButton = (Button)infoWindow.findViewById(R.id.button);

        // Setting custom OnTouchListener which deals with the pressed state
        // so it shows up 
        this.infoButtonListener = new OnInfoWindowElemTouchListener(infoButton,
                getResources().getDrawable(R.drawable.btn_default_normal_holo_light),
                getResources().getDrawable(R.drawable.btn_default_pressed_holo_light)) 
        {
            @Override
            protected void onClickConfirmed(View v, Marker marker) {
                // Here we can perform some action triggered after clicking the button
                Toast.makeText(MainActivity.this, marker.getTitle() + "'s button clicked!", Toast.LENGTH_SHORT).show();
            }
        }; 
        this.infoButton.setOnTouchListener(infoButtonListener);


        map.setInfoWindowAdapter(new InfoWindowAdapter() {
            @Override
            public View getInfoWindow(Marker marker) {
                return null;
            }

            @Override
            public View getInfoContents(Marker marker) {
                // Setting up the infoWindow with current's marker info
                infoTitle.setText(marker.getTitle());
                infoSnippet.setText(marker.getSnippet());
                infoButtonListener.setMarker(marker);

                // We must call this to set the current marker and infoWindow references
                // to the MapWrapperLayout
                mapWrapperLayout.setMarkerWithInfoWindow(marker, infoWindow);
                return infoWindow;
            }
        });

        // Let's add a couple of markers
        map.addMarker(new MarkerOptions()
            .title("Prague")
            .snippet("Czech Republic")
            .position(new LatLng(50.08, 14.43)));

        map.addMarker(new MarkerOptions()
            .title("Paris")
            .snippet("France")
            .position(new LatLng(48.86,2.33)));

        map.addMarker(new MarkerOptions()
            .title("London")
            .snippet("United Kingdom")
            .position(new LatLng(51.51,-0.1)));
    }

    public static int getPixelsFromDp(Context context, float dp) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int)(dp * scale + 0.5f);
    }
}

错误是因为谷歌已经删除了 getMap 但不知道替代解决方案。

Error:(149, 42) 错误:找不到符号方法 getMap()

最佳答案

您现有的代码是:

 final MapFragment mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.map);
    final GoogleMap map = mapFragment.getMap();

试试这个而不是那个:

 MapFragment mapFragment; // declare in global scope
 GoogleMap googleMap; // declare in global scope

将此代码放在 OnCreate 方法中:

mapFragment = (MapFragment)getFragmentManager().findFragmentById(R.id.map);

                mapFragment.getMapAsync(new OnMapReadyCallback() {
                    @Override
                    public void onMapReady(GoogleMap map) {
                        googleMap = map;

                        googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
                        googleMap.setMyLocationEnabled(false); // false to disable
                        googleMap.setOnMarkerClickListener(onMarkerClick);
                        googleMap.setOnInfoWindowClickListener(onInfoWindowClick);
                        googleMap.getUiSettings().setZoomControlsEnabled(true);// Display Zoom Controls
                        googleMap.setMyLocationEnabled(true);// Display My Location Control
                    }
                });
            }

要将像素转换为 DP,请使用:

    public int getPixelsFromDp(int px){ 
       DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); 
    return Math.round(px / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT)); 
} 

关于java - getMap() 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46180722/

相关文章:

java - Spring 3 MVC Hibernate 3.5.4 hibernateTemplate 不关闭连接(非事务性)

java - 我正在创建 java api 来连接 kafka

安卓.content.res.Resources$NotFoundException : Resource ID #0x7f07007e

java - 使用 HttpsURLConnection 忽略 ssl 证书的方法

Android 基于检查的每日通知

java - Integer.parseInt 错误 : java. lang.Integer.parseInt(来源未知)

java - 使用 Scanner 类 nextLine() 方法从文件中读取单词时出现问题

android - 以编程方式启用/禁用 "Battery Saver"模式

java - 如何计算 Android 中收到的通知并设置图标徽章

java/ant jar 文件 SecurityException