13

这是 Android 应用程序的主屏幕。一切都在 WebView 中呈现。

当我点击左下角的按钮时,此叠加层会打开,其内容会动态添加到其中。

当我点击其中一个图标时,它应该被添加到左侧的栏中。它确实如此。

但是,当我点击另一个图标时,什么也没有发生。它应该调用的函数没有运行(我alert ()在它的开头放了一个检查)。

当我关闭叠加层(左上角的按钮)并再次打开它(左下角)时,我可以添加另一个图标。但是再一次,直到覆盖层关闭并再次打开,下一个事件才会触发。

我不知道解决这个问题有多容易,因为我不确定是否每个人都遇到过这个问题。我(在运行 Android 4.0.4 的三星 GT-P6200 上)可以。其他人也向我抱怨过这件事。然而,在 SDK 中包含的 Android 模拟器中,Android 4.1 和 4.1 似乎没有发生这种情况。好像是4.0的问题。

叠加层中的图标如下所示;<div class="appLauncher" onClick="launchApp (' + i + ')"><img src="data:image/png;base64,' + base64 + '" alt="[~]" /><br /><span>' + label + '</span></div>

如果有什么不同,我会使用 jQuery 来处理 DOM。

function launchApp (i)
{
    // Putting an alert () here indicates that the function doesn't get called, because no alert box appears on the screen //
    try
    {
        if (! launcherEdit)
        {
            android.launchAppFromList (i);
        }
        else
        {
            addAppToLauncherFromList (i); // This is what should happen //
        }
    }
    catch (ex)
    {
        handleException (ex);
    }
}

应用程序本身可以在这里找到;https://play.google.com/store/apps/details?id=be.robinj.ubuntu
的源代码可以在这里找到;http://bazaar.launchpad.net/~robinj/be.robinj.ubuntu/trunk/files
这是 Javascript 文件;http://bazaar.launchpad.net/~robinj/be.robinj.ubuntu/trunk/view/head:/assets/script.js


并且请,请不要在没有正确理解实际问题的情况下将其关闭为“完全重复” ,就像以前发生过很多次一样。


这种血腥的混乱似乎只存在于 Android 4.0.4 及更低版本(或该版本号附近的某个地方)。只有完全忽略了 appLaunchers 的点击。


我开始在这里看到某种联系......在将项目添加到左侧栏的 jQuery 动画播放后,它总是开始失败。这开始看起来可疑地像一个重绘问题......


不确定这是否相关,但看到它在我的控制台中弹出......

02-12 14:30:22.650: E/dalvikvm(3936): JNI ERROR (app bug): attempt to use stale global reference 0xe
02-12 14:30:22.650: E/dalvikvm(3936): VM aborting
02-12 14:30:22.650: A/libc(3936): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
4

4 回答 4

7

如果您使用 jQuery,最好使用“ bind ”事件来绑定您的点击事件。

例如:

    <div class="appLauncher" data-id= ' + i + '">
<img src="data:image/png;base64,' + base64 + '" alt="[~]" /><br /><span>' + label + '</span></div>

而不是在您使用的javascript文件中:

$(".appLauncher").bind("click",function(){
   var i=$(this)attr("data-id");
   launchApp(i);
});

试着让我知道它对你有帮助吗:)

于 2013-02-11T18:50:17.723 回答
2

不是一个 javascript 的人,但我知道 Android 在“一次性”触发器和可重复使用的触发器 (PendingIntents) 之间做出了明确的区分。您是否有可能以某种方式实例化 .appLaunch 的行为?

于 2013-02-15T14:05:04.503 回答
2

我想你被issue 19827击中了

在这种情况下,请尝试添加对preventDefault(未测试)的调用

$(".appLauncher").bind("click", function(e) {
   e.preventDefault();
   var i = $(this)attr("data-id");
   launchApp(i);
});
于 2013-02-15T16:32:00.710 回答
1

我看了http://bazaar.launchpad.net/~robinj/be.robinj.ubuntu/trunk/view/head:/assets/script.js

您在脚本文件中设置了“var scrollable = Array ()”。它不应该是 new Array() 还是简单的 []

如果这与您的 JNI 错误(应用程序错误)有关,请尝试:尝试使用过时的全局参考 0xe

于 2013-02-15T07:22:41.330 回答