Tizen 本机:不调用硬件按钮的回调集



我使用以下代码设置硬件按钮的回调:

static void win_more_cb(void* data, Evas_Object* obj, void* event_info) {
appdata_s* ad = data;
if (ad->ctxpopup != NULL) evas_object_del(ad->ctxpopup);
ad->ctxpopup = elm_ctxpopup_add(ad->win);
elm_object_style_set(ad->ctxpopup, "more/default");
eext_object_event_callback_add(ad->ctxpopup, EEXT_CALLBACK_BACK, _eext_ctxpopup_back_cb, NULL);
eext_object_event_callback_add(ad->ctxpopup, EEXT_CALLBACK_MORE, _eext_ctxpopup_back_cb, NULL);
evas_object_smart_callback_add(ad->ctxpopup, "dismissed", ctxpopup_dismissed_cb, NULL);
elm_ctxpopup_item_append(ad->ctxpopup, "Add", NULL, ctxpopup_add_cb, NULL);
move_more_ctxpopup(ad->ctxpopup);
evas_object_show(ad->ctxpopup);
}

但是,它从未被召唤过。

注意:我使用了一个专门创建的_eext_ctxpopup_back_cb,它编写调试日志来检查它是否被调用,而不是标准eext_ctxpopup_back_cb。我也尝试过eext_ctxpopup_back_cb

使用此代码,当我点击硬件按钮(返回或更多(时,它会调用为主窗口设置的回调。_eext_ctxpopup_back_cb从不叫

!下面是代码,它为主窗口设置回调:

eext_object_event_callback_add(ad->win, EEXT_CALLBACK_BACK, win_back_cb, ad);
eext_object_event_callback_add(ad->win, EEXT_CALLBACK_MORE, win_more_cb, ad);

因此,看起来eext_object_event_callback_add()实际上并没有为 Ctxpopup 设置回调,或者 Ctxpopup 由于某种原因没有接收EEXT_CALLBACK_BACKEEXT_CALLBACK_MORE事件。

我在 Tizen Native API 文档和许多示例应用程序中看到了 Ctxpopupeext_object_event_callback_add()的使用,所以我认为它应该可以工作,但它没有。

请指教。

更新:

我将尚未准备好的应用程序部署到 Tizen 设备,后退按钮在那里工作!因此,这是调试环境或模拟器中的内容(它在模拟器中不起作用(。

正如我在"更新"中所写,这只发生在模拟器中。在真实设备(三星Z1(上,硬件"后退"按钮在指定代码下工作正常。

但是,我也设法为模拟器修复了这个问题:

我发现如果为主窗口(ad->win(注册了任何硬件回调(EEXT_CALLBACK_BACKEEXT_CALLBACK_MORE(,则不会为ctxpopup(以及我稍后添加的naviframe(调用EEXT_CALLBACK_BACK。一旦我EEXT_CALLBACK_MORE移动到naviframe,硬件后退按钮也开始在模拟器中工作。

因此,一般来说,看起来不应该为主窗口设置这两个回调。如果是,则子组件不会接收硬件"后退"和"更多"事件。

相关内容

  • 没有找到相关文章

最新更新