I trying to get the selected row number (pushed button) in a list. Adding an event to the button always returns 1
static void event_handler(lv_event_t * e)
{
lv_obj_t * obj = lv_event_get_target(e);
LV_LOG_USER(“Clicked: %d”, lv_obj_get_user_data(obj));
}
void test(void)
{
lv_obj_t * list = lv_list_create(lv_screen_active());
lv_obj_set_width(list, 400);
lv_obj_center(list);
lv_obj_t * btn;
char buf[5];
for(int i = 0; i < 10; i++)
{
lv_snprintf(buf, 5, "%d", i+1);
btn = lv_list_add_button(list, LV_SYMBOL_FILE, buf);
lv_obj_set_user_data(btn, i+1);
lv_obj_add_event_cb(btn, event_handler, LV_EVENT_CLICKED, NULL);
}
}
I’m not sure if this is what you want, maybe you can give it a try
I’m doing it in this way:
** for(int i=0;i<mWifiSettings.count;i++){
switch(i){
case 0:{
lv_obj_t * btn;
int row=i;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid0);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, &row);
break;
}
case 1:{
lv_obj_t * btn;
int row=i;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid1);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, &row);
break;
}
case 2:{
lv_obj_t * btn;
int row=i;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid2);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, &row);
break;
}
case 3:{
lv_obj_t * btn;
int row=i;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid3);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, &row);
break;
}
case 4:{
lv_obj_t * btn;
int row=i;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid4);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, &row);
break;
}
case 5:{
lv_obj_t * btn;
int row=i;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid5);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, &row);
break;
}
case 6:{
lv_obj_t * btn;
int row=i;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid6);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, &row);
break;}
}
}**
int* row=(int*)lv_event_get_user_data(e);
if(code == LV_EVENT_CLICKED) {
selectedWifiSetting=*row;
}
I think you have to pass a number and not a reference, e.g. for case number 3:
case 3:{
lv_obj_t * btn;
btn=lv_list_add_button(objects.wifi_settings_list,NULL,mWifiSettings.ssid0);
lv_obj_add_event_cb(btn, wifiSettingsItemHandler, LV_EVENT_CLICKED, (void *) 3 /*<--here*/);
break;
}
Then you have to retrieve an integer like this:
int row=(int)(int*)lv_event_get_user_data(e);
if(code == LV_EVENT_CLICKED) {
selectedWifiSetting=row;
}
Let me know if it works for you