带有 MapView 的 RelativeLayout 中的视图为空

Posted

技术标签:

【中文标题】带有 MapView 的 RelativeLayout 中的视图为空【英文标题】:Views in a RelativeLayout with MapView are null 【发布时间】:2011-10-30 22:58:55 【问题描述】:

我有一个带有地图视图的 MapActivity。它工作正常。现在我想在我的 MapView 上添加一个 SeekBar。它必须在底部,但在地图视图上。用户将滚动以设置距离。任何。我的问题是,当我通过 findViewById() 到达它们时,我试图放置的任何视图都是空的。

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_>

    <com.google.android.maps.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapview"
        android:layout_
        android:layout_
        android:clickable="true"
        android:apiKey="mykey"/>
    <SeekBar
        android:id="@+id/DistanceBar"
        android:max="2000"
        android:progress="2000"
        android:layout_alignParentBottom="true"
        android:layout_
        android:layout_
        android:padding="14dip"></SeekBar>
</RelativeLayout>

我正在尝试这样实现:

public class MyActivity extends MapActivity implements LocationListener 
...
SeekBar DistanceBar;
...
@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mapView = (MapView) findViewById(R.id.mapview);
    DistanceBar = (SeekBar) findViewById(R.id.DistanceBar); //This is afterwards null.

我到处进行了研究,找不到类似的问题。有人使用了非常相似的东西。所以我忽略了它是空的,我没有在 onCreate() 中调用 SeekBar。但是 SeekBar 根本没有被绘制。我不能将其他视图添加到 mapactivity 中吗?

感谢您的任何想法!

一个重要的编辑:图形布局查看器显示 SeekBar,因为它应该在 mapview 的底部。

我仍然得到 NullPointerException: 错误/AndroidRuntime(12738):致命异常:主要

ERROR/AndroidRuntime(12738): java.lang.RuntimeException: 无法启动活动 ComponentInfocom.MyApps.MapLocations/com.MyApps.MapLocations.MyActivity: java.lang.NullPointerException

错误/AndroidRuntime(12738):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

错误/AndroidRuntime(12738):在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

ERROR/AndroidRuntime(12738): 在 android.app.ActivityThread.access$2300(ActivityThread.java:125)

错误/AndroidRuntime(12738):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)

ERROR/AndroidRuntime(12738): 在 android.os.Handler.dispatchMessage(Handler.java:99)

ERROR/AndroidRuntime(12738): 在 android.os.Looper.loop(Looper.java:123)

ERROR/AndroidRuntime(12738): 在 android.app.ActivityThread.main(ActivityThread.java:4627)

ERROR/AndroidRuntime(12738): at java.lang.reflect.Method.invokeNative(Native Method)

错误/AndroidRuntime(12738): 在 java.lang.reflect.Method.invoke(Method.java:521)

错误/AndroidRuntime(12738):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871)

错误/AndroidRuntime(12738):在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629)

ERROR/AndroidRuntime(12738): at dalvik.system.NativeStart.main(Native Method)

ERROR/AndroidRuntime(12738):原因:java.lang.NullPointerException

ERROR/AndroidRuntime(12738):在 com.MyApps.MapLocations.MyActivity.setupSeekbar(MyActivity.java:343)

错误/AndroidRuntime(12738):在 com.MyApps.MapLocations.MyActivity.onCreate(MyActivity.java:89)

错误/AndroidRuntime(12738):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

错误/AndroidRuntime(12738):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

ERROR/AndroidRuntime(12738): ... 11 更多

这是 HierarchyViewer 的结果:

【问题讨论】:

您在问题中显示的布局是否包含在 main.xml 中? 是的,这个relativelayout、mapview和seekbar都在main.xml中并且已经保存了。 请将您的空指针异常中的堆栈跟踪添加到您的问题中。 我在我的问题中添加了堆栈跟踪。 【参考方案1】:

我不能将其他视图添加到地图活动吗?

是的,你可以。

清理您的项目(项目 -> 从 Eclipse 主菜单清理或在命令行ant clean)。然后使用Hierarchy View 看看发生了什么。听起来您的 ID 不正确(在这种情况下,清理会有所帮助),或者您未能保存 XML 或其他内容。

【讨论】:

我已经清理了我的项目。但问题仍然存在。顺便说一句,层次结构视图对我不起作用。我收到以下错误消息: [2011-08-20 01:47:23 - hierarchyviewer]无法从设备 10009c031579 获取查看服务器版本 [2011-08-20 01:47:23 - hierarchyviewer]无法获取查看服务器协议版本从设备 10009c031579 [2011-08-20 01:47:26 - hierarchyviewer]无法调试设备 10009c031579 [2011-08-20 01:48:06 - hierarchyviewer]无法从设备 10009c031579 获取查看服务器版本以前没用过。 @Genom:你只能在模拟器中使用层次视图。 我在我的问题中添加了层次结构树。 @Genom:那么,Android 不会膨胀您拥有SeekBar 的布局。也许您将该 XML 保存到不同的文件中。 @Genom:滚动到这个问题的顶部。看看你的布局。它是一个RelativeLayout 持有一个MapView 和一个SeekBar。现在看看这个问题中层次结构视图的屏幕截图。它表明MapView 的父级是LinearLayout。因此,您在这个问题中的 XML 布局和在这个问题中由 Hierarchy View 显示的层次结构 不是来自同一资源【参考方案2】:

我刚刚将 main.xml 文件复制为 map.xml 并删除了 main.xml。它奏效了。我还是不明白为什么会这样。也许“主要”会导致一些问题。也许 MapActivities 已经为自己定义了一个“主”布局,它打断了我的“主”布局。但不知何故,这就是解决方案。非常感谢您的耐心等待!

重要编辑:我确实找到了问题所在。 main.xml 文件保留在没有任何 SeekBar 的 layout-normal 和 layout-normal-long 文件夹中。我忘了编辑那些。

【讨论】:

以上是关于带有 MapView 的 RelativeLayout 中的视图为空的主要内容,如果未能解决你的问题,请参考以下文章

带有默认地图视图引脚的 Swift Mapview 自定义调出视图

将带有坐标的单个字符串转换为 CLLocationCoordinate2D 数组,并使用该数组在 mapView 中生成多边形

如何在mapview中为标记(叠加)图像设置动画

为啥使用 mapview 看不到 android 小吃吧?

在具有 backgroundColor 的 MapView 上方时,TouchableOpacity 不可点击

无法让 MapView 放大当前位置 - SWIFT