【问题标题】:How to fetch onNavigationItemSelected() values in onMapReady() in android如何在 android 的 onMapReady() 中获取 onNavigationItemSelected() 值
【发布时间】:2017-09-09 09:26:35
【问题描述】:

我正在尝试为导航抽屉中列出的每个项目提供位置坐标,并将其指向谷歌地图。

它如何获取我分配给 onNavigationItemSelected() 中的变量到 onMapReady() 的 lat 和 long?

//This is were I assign the coordiantes
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    double lat = 0;
    double lon = 0;

    if (id == R.id.redBuilding){
        /*lat = 13.010982;
        lon = 80.235444;

        String latitude = Double.toString(lat);
        String longitude = Double.toString(lon);
        latLong = latitude+"/"+longitude; */
    }

    if (id == R.id.nav_share) {
    } else if (id == R.id.nav_send) {
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

我想在此方法中获取分配的坐标以将其指向地图:

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
LatLng latLon = new LatLng(13.0827, 80.2707);
    mMap.addMarker(new MarkerOptions().position(latLon).title("Marker is in Chennai.").snippet("India"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLon));
}

我只使用一个活动,其中地图位于片段中。

【问题讨论】:

  • 方法onMapReady(GoogleMap googleMap)是否在片段中?
  • 您是否在不同的片段中加载地图?或者在activity中加载地图片段
  • @SifatOshan,没有。
  • @tahsinRupam,我正在将地图加载到我在主要活动本身中显示的片段中。
  • 您可以使用接口将LatLng值发送到片段并更新地图

标签: java android google-maps android-studio


【解决方案1】:

如果您想更改标记,您不必使用onMapReady。您可以在初始化地图时保存标记,然后在每次用户选择项目时更改它。

private Marker marker;

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    LatLng latLon = new LatLng(13.0827, 80.2707);
    marker = mMap.addMarker(new MarkerOptions().position(latLon).title("Marker is in Chennai.").snippet("India"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLon));
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();

    double lat = 0;
    double lon = 0;

    if (id == R.id.redBuilding){
        lat = 13.010982;
        lon = 80.235444;

        mMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lon));
        marker.setPosition(new LatLng(lat, lon));
        marker.setTitle("your new title");
    }

    if (id == R.id.nav_share) {
    } else if (id == R.id.nav_send) {
    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

【讨论】:

    【解决方案2】:

    如果 onNavigationItemSelected() 和 onMapReady() 方法都在同一个活动中,那么您可以通过将变量设为全局来轻松获取值。如果他们处于不同的活动中,那么您可以使用模型或意图。

    【讨论】:

      【解决方案3】:

      @纪尧姆:

      导致运行时异常:

      java.lang.NullPointerException
                        at mca.annauniv.ceg.MainActivity.a(Unknown Source)
                        at android.support.design.widget.NavigationView$1.a(Unknown Source)
                        at android.support.v7.view.menu.h.a(Unknown Source)
                        at android.support.v7.view.menu.u.a(Unknown Source)
                        at android.support.v7.view.menu.j.b(Unknown Source)
                        at android.support.v7.view.menu.h.a(Unknown Source)
                        at android.support.design.internal.c$1.onClick(Unknown Source)
                        at android.view.View.performClick(View.java:4633)
                        at android.view.View$PerformClick.run(View.java:19330)
                        at android.os.Handler.handleCallback(Handler.java:733)
                        at android.os.Handler.dispatchMessage(Handler.java:95)
                        at android.os.Looper.loop(Looper.java:157)
                        at android.app.ActivityThread.main(ActivityThread.java:5356)
                        at java.lang.reflect.Method.invokeNative(Native Method)
                        at java.lang.reflect.Method.invoke(Method.java:515)
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
                        at dalvik.system.NativeStart.main(Native Method)
      

      【讨论】:

      • 什么时候出现这个错误?当您选择您的 redBuilding 项目时?如果是,请确保您的地图已初始化(带有标记“Marker is in Chennai”的地图显示。)
      • 感谢@Guillaume。有用。感谢大家的杰出贡献。
      猜你喜欢
      • 2021-07-29
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-12
      相关资源
      最近更新 更多