Tizen Native:不调用硬件按钮的回调集
Tizen Native: Callback set for hardware buttons are not called
我使用以下代码设置硬件按钮“返回”和“更多”的回调:
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
。
使用此代码,当我点击硬件按钮(后退或更多)时,它会调用为主要 window 设置的回调。 _eext_ctxpopup_back_cb
从未被调用!
这是代码,它为主要设置回调 window:
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_BACK
和 EEXT_CALLBACK_MORE
事件。
我在 Tizen Native API 文档和许多示例应用程序中看到 eext_object_event_callback_add()
和 Ctxpopup 的用法,所以我认为它应该有效,但没有。
请指教
更新:
我将尚未准备好的应用程序部署到 Tizen 设备,并且“后退”按钮在那里工作!所以,这是调试环境或模拟器中的东西(它在模拟器中不起作用)。
正如我在 "update" 中所写,这只发生在模拟器中。在真实设备 (Samsung Z1) 上,硬件后退按钮可以正常使用指定代码。
但是,我也设法为模拟器修复了这个问题:
我发现如果任何硬件回调(EEXT_CALLBACK_BACK
或 EEXT_CALLBACK_MORE
) 被注册为主 window (ad->win
)。一旦我将 EEXT_CALLBACK_MORE
移动到 naviframe
,硬件后退按钮也开始在模拟器中工作。
因此,一般来说,这两个回调似乎永远不应该为主设置 window。如果是,则子组件不会接收硬件返回和更多事件。
我使用以下代码设置硬件按钮“返回”和“更多”的回调:
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
。
使用此代码,当我点击硬件按钮(后退或更多)时,它会调用为主要 window 设置的回调。 _eext_ctxpopup_back_cb
从未被调用!
这是代码,它为主要设置回调 window:
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_BACK
和 EEXT_CALLBACK_MORE
事件。
我在 Tizen Native API 文档和许多示例应用程序中看到 eext_object_event_callback_add()
和 Ctxpopup 的用法,所以我认为它应该有效,但没有。
请指教
更新:
我将尚未准备好的应用程序部署到 Tizen 设备,并且“后退”按钮在那里工作!所以,这是调试环境或模拟器中的东西(它在模拟器中不起作用)。
正如我在 "update" 中所写,这只发生在模拟器中。在真实设备 (Samsung Z1) 上,硬件后退按钮可以正常使用指定代码。
但是,我也设法为模拟器修复了这个问题:
我发现如果任何硬件回调(EEXT_CALLBACK_BACK
或 EEXT_CALLBACK_MORE
) 被注册为主 window (ad->win
)。一旦我将 EEXT_CALLBACK_MORE
移动到 naviframe
,硬件后退按钮也开始在模拟器中工作。
因此,一般来说,这两个回调似乎永远不应该为主设置 window。如果是,则子组件不会接收硬件返回和更多事件。