Getting selected row number in list

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