Подтвердить что ты не робот

Невозможно зарегистрировать события

Это главный экран приложения для Android. Все, что отображается внутри WebView.

Когда я нажимаю кнопку в левом нижнем углу, открывается этот оверлей с динамическим добавлением его содержимого.

Когда я нажимаю один из значков, он должен быть добавлен в панель слева. И так оно и есть.

Когда я нажимаю другой значок, все равно ничего не происходит. Функция, которую он должен вызвать, не запускается (я проверил, положив alert () в начале ее).

Когда я закрываю оверлей (кнопка в верхнем левом углу) и снова открываю его (внизу слева), я могу добавить еще один значок. Но опять же, следующее событие не будет срабатывать, пока оверлей не будет закрыт и не откроется еще раз.

Я не знаю, как легко это будет исправляться, так как я не уверен, что все испытывают эту проблему. Я (на моем Samsung GT-P6200 под управлением Android 4.0.4). Кто-то еще пожаловался мне об этом. Однако в эмуляторе Android, включенном в SDK, такого типа не происходит с 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)
4b9b3361

Ответ 1

Если вы используете jQuery, чем лучше, используйте событие привязать ", чтобы связать событие click.

Например:

    <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);
});

Попробуйте и сообщите мне, помогает ли это вам или нет:)

Ответ 2

Не так много из javascript, но я знаю, что Android делает четкое различие между триггерами "один" и повторно используемыми триггерами (PendingIntents). Возможно ли, что вы каким-то образом создаете экземпляр, похожий на .appLaunch?

Ответ 3

Я полагаю, вы попали в issue 19827

В этом случае попробуйте добавить вызов preventDefault (не проверено)

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

Ответ 4

Я посмотрел на http://bazaar.launchpad.net/~robinj/be.robinj.ubuntu/trunk/view/head:/assets/script.js

В файле script вы установили "var scrollable = Array()". Разве это не новый Array() или просто обычный []

Просто попробуйте, если это связано с вашей ошибкой JNI (ошибка приложения): попытка использовать устаревшую глобальную ссылку 0xe