Tizen Native:不调用硬件按钮的回调设置

时间:2018-06-10 19:29:35

标签: tizen tizen-native-app efl

我使用代码设置了硬件按钮Back和More的回调:

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文档和许多示例应用程序中看到eext_object_event_callback_add()与Ctxpopup一起使用,所以我认为它应该有效,但事实并非如此。

请建议。

更新

我将尚未准备好的应用程序部署到Tizen设备,后退按钮在那里工作!所以,这是Debug环境或模拟器中的东西(它在模拟器中不起作用)。

1 个答案:

答案 0 :(得分:0)

正如我在“更新”中所写,这仅发生在模拟器中。在实际设备(三星Z1)上,使用指定的代码可以使硬件“后退”按钮正常工作。

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

我发现EEXT_CALLBACK_BACK不会被ctxpopup(以及稍后添加的naviframe)调用,如果有任何硬件回调({{1 }}或EEXT_CALLBACK_BACK)已注册到主窗口(EEXT_CALLBACK_MORE)。将ad->win移至EEXT_CALLBACK_MORE后,硬件“后退”按钮也开始在模拟器中起作用。

因此,通常看来,不应为主窗口设置这两个回调。如果是这样,子组件将不会收到硬件“返回”和“更多”事件。