android - Nutiteq:ViewLabel:延迟按钮执行

标签 android android-handler nutiteq android-looper

我正在尝试使用包含三个 Button 的自定义 View 创建 nutiteq ViewLabel。 我的代码和问题与这篇文章非常相似nutiteq: Button resp. clickable Views not working in Custom ViewLabel .

根据引用帖子的提供答案,我注意到调用了 View 的 onTouchEvent-Method,并且执行点击的对象由处理程序发布到 runQueue,该处理程序由编舞家。

ViewLabel 中按下一个 Button 之后,我上面描述的那些内部调用发生了,但是 onClick - 的方法>Button 直到我按下 ViewLabel 之外的某处才会执行。然后 ViewLabel 关闭(就像它应该的那样,当按下它后面的 map 时)和 Toast 我放在 onClick 中的方法被触发.

我认为问题与 UIThread 有关。似乎 performClick-Action 被放入了错误的 runQueue,当用户没有打开 Label 时它是活跃的。

如果有人有想法,如何解决该问题,那就太好了。

已编辑: 这是我构建 ViewLabel 的方式。此方法位于由 MapActivity 调用的类中:

    public void createViewMarker(View markerView, Bitmap icon, MapPos pos, Category cat, String tag) {
    MarkerStyle markerStyle = MarkerStyle.builder().setBitmap(icon).setSize(0.5f).setColor(
            Color.WHITE).build();
    ViewLabel label = new ViewLabel(markerView, new Handler(Looper.getMainLooper()));
    label.setTouchHandlingMode(true);
    markers.add(new MocaMarker(pos, label, markerStyle, cat,
            markerLayer, tag));
}

最佳答案

在谷歌群组中的 nutiteq 团队回复后也没有解决方案( see here ) 我决定完全摆脱 ViewLabel。

我现在的解决方案是将准备好的 poi View 的布局包含到 MapActivity 布局文件中,并将其与我自定义的 MapListener 实现一起加载。 我在 MapListener 的构造函数中对 poi View 元素进行了所有初始化,并在调用方法 onVectorElementClicked 时更改了可见性。这是它的基本外观 fragment :

 @Override
public void onMapClicked(double x, double y, boolean b) {
    Toast.makeText(activity, "onMapClicked " + (new EPSG3857()).toWgs84(x, y).x + " " + (new EPSG3857()).toWgs84(x, y).y, Toast.LENGTH_SHORT).show();
    Log.d(TAG, "onMapClicked " + x + " " + y);
    activity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            mPoiGlanceView.setVisibility(View.INVISIBLE);
        }
    });
}

@Override
public void onVectorElementClicked(VectorElement vectorElement, double v, double v2, boolean b) {
    if (vectorElement != null && vectorElement instanceof Marker) {
        showPopupView(vectorElement);
        Toast.makeText(activity, "onLabelClicked Marker!", Toast.LENGTH_SHORT).show();
    }
}

private void showPopupView(VectorElement vectorElement) {
    mPoiGlanceView.setVisibility(View.VISIBLE);
    setUpUiElementsForView();
}

我在 nutiteq 的 github 文档中受到 ViewLabel 替代方案的启发 see here “使用 Android 标准布局工具”

关于android - Nutiteq:ViewLabel:延迟按钮执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064524/

相关文章:

java - 从处理程序调用时,asynctask 未获取 arraylist

java - getHandler().removeCallbacksAndMessages(null) 在自定义 View 中不起作用

android - nutiteq map 上的折线 onLocattionChanged

android - png map 图 block 和 .osm xml 文件有何关联?

android - 如何在 nutiteq map 中绘制从 MapQuestApi 接收到的路线?

android - AdMob 横幅未显示 Phonegap + JqueryMobile

android - 使用 React Native 时,我有哪些存储数据的选项? (iOS 和安卓)

android - 困惑如何使用 Mockito 进行 android 测试

android - Linphone for android 不工作/缺少库

java - 通过处理程序调用 Activity 内的另一个 Activity 函数不起作用