Tizen开发中如何向自定义Genlist EDC主题发送信号触发内置程序
Tizen EFL 场景下自定义样式 Genlist 的 EDC 信号触发方案
此前三次调用失效的根因
elm_layout_signal_emit无反应属于正常情况:该API仅接收Elm_Layout类型的实例作为入参,Genlist是独立的复合容器组件,不属于Layout类,类型不匹配时无法触达EDC逻辑。- 直接对
myList顶层句柄调用elm_object_signal_emit/edje_object_signal_emit失效,是三类叠加问题导致:- 样式未真正加载:你定义的EDC group全路径为
elm/genlist/base/mystyle,而EFL加载Genlist样式的规则是,将elm_object_style_set传入的字符串拼在elm/genlist/后组成查找的完整group名。之前调用时传入的是"mystyle",框架实际查找的是elm/genlist/mystyle,根本没有加载你写的自定义EDC配置,自然没有对应program可以触发。 - 对象层级不匹配:
myList是Genlist的顶层容器句柄,本身不是绑定自定义EDC的Edje实例。从顶层容器发出的信号不会自动透传到内部承载样式的核心Edje层,就算EDC正常加载了,信号也到不了program所在的逻辑域。 - 触发条件不匹配:你在EDC里定义的
myprogram设置了明确的双触发规则:收到信号mysignal、且信号source值为app。如果调用信号接口时漏传source、传入的source值和配置不一致,哪怕信号到了正确的Edje对象上,也无法匹配到program的触发条件。
- 样式未真正加载:你定义的EDC group全路径为
正确实现流程
- 修正样式加载的入参,确保自定义EDC真正生效
将elm_object_style_set的入参调整为和EDC路径匹配的字符串,让框架能正确找到对应的group:elm_object_style_set(myList, "base/mystyle"); - 获取Genlist内部承载EDC的核心Edje对象
不再直接使用顶层Genlist句柄发送信号,通过EFL提供的组件通用接口取出内部绑定样式的Edje实例:Evas_Object *genlist_core_edje = elm_widget_layout_get(myList); - 严格匹配EDC触发规则发送信号
调用接口时传入和program配置完全一致的信号名、source值,不能漏传source参数:edje_object_signal_emit(genlist_core_edje, "mysignal", "app");
排查校验技巧
如果调用后没有触发预期效果,可以临时在myprogram逻辑中加入可视化校验效果(比如将某个常驻part的颜色改为醒目红色)。触发成功时界面会立刻出现对应变化,如果没有变化,依次排查EDC group路径、style入参、edje对象获取、source参数四个环节的匹配度即可定位问题。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

