Description
What MCU/Processor/Board and compiler are you using?
ESP32-S3
What LVGL version are you using?
8.3.6
What do you want to achieve?
tabview event callback. I want to know which tab is pressed out of multiple tabs. I want to add some application based on which tab has been pressed.
I have tried to implement similar the one discussed in How to set a new event-callback for tabview - #2 by TridentTD
but it fails while compilation
error: expected expression before '[' token
lv_obj_t* tabview = lv_tabview_create(lv_scr_act(), NULL);
lv_obj_t *tab1 = lv_tabview_add_tab(tabview, "Tab 1");
lv_obj_t *tab2 = lv_tabview_add_tab(tabview, "Tab 2");
lv_obj_t *tab3 = lv_tabview_add_tab(tabview, "Tab 3");
lv_obj_set_event_cb(tabview, [](lv_obj_t* tabview, lv_event_t event){
if(event != LV_EVENT_VALUE_CHANGED) return;
lv_tabview_ext_t* ext = (lv_tabview_ext_t*) lv_obj_get_ext_attr(tabview);
const char* tab_name = ext->tab_name_ptr[lv_tabview_get_tab_act(tabview)];
printf("Current Active Tab : %s\n", tab_name);
});
What have you tried so far?
created tabview with 5 tabs and tried to create eventcallback similar to button widget. but the callback function is not getting called when any tab is pressed.
lv_obj_add_event_cb(ui_TAB1, ui_event_TAB1, LV_EVENT_ALL, NULL);
lv_obj_add_event_cb(ui_TAB2, ui_event_TAB2, LV_EVENT_ALL, NULL);
void ui_event_TAB1(lv_event_t * e){
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_VALUE_CHANGED ) {
debug_print("\ntab1_pressed");
}
}
void ui_event_TAB2(lv_event_t * e){
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * target = lv_event_get_target(e);
if(event_code == LV_EVENT_VALUE_CHANGED ) {
debug_print("\ntab2_pressed");
}
}