1、有问题的调用
lv_obj_t *label_roller;
static void event_roller_cb(lv_event_t *e)
{
lv_event_code_t code = lv_event_get_code(e);
lv_obj_t *roller = lv_event_get_target(e);
if (LV_EVENT_DRAW_MAIN_BEGIN == code || LV_EVENT_VALUE_CHANGED == code) {
static char buf[10];
lv_roller_get_selected_str(roller, buf, sizeof(buf));
printf("%s %x\n", buf, label_roller);
lv_label_set_text(label_roller, buf);
}
}
static void event_btn_up_cb(lv_event_t *e)
{
lv_obj_t *roller = (lv_obj_t *)e->user_data;
uint16_t item = lv_roller_get_selected(roller);
if (item > 0) {
item--;
} else {
item = lv_roller_get_option_cnt(roller) - 1;
}
lv_roller_set_selected(roller, item, LV_ANIM_OFF);
}
static void event_btn_down_cb(lv_event_t *e)
{
lv_obj_t *roller = (lv_obj_t *)e->user_data;
uint16_t item = lv_roller_get_selected(roller);
if (item < lv_roller_get_option_cnt(roller) - 1) {
item++;
} else {
item = 0;
}
lv_roller_set_selected(roller, item, LV_ANIM_OFF);
}
事件回调的代码
lv_obj_add_event_cb(roller, event_roller_cb, LV_EVENT_ALL, label_roller);
lv_obj_add_event_cb(btn_up, event_btn_up_cb, LV_EVENT_PRESSED, roller);
lv_obj_add_event_cb(btn_down, event_btn_down_cb, LV_EVENT_PRESSED, roller);
上面有问题是出现在通过按键去改变roller选项,然后在选项改变后再设置label的文本,但是发现文本不刷新,但是打印发现buf的字符串是有变化
2、没问题的代码
static void event_btn_up_cb(lv_event_t *e)
{
lv_obj_t *roller = (lv_obj_t *)e->user_data;
uint16_t item = lv_roller_get_selected(roller);
if (item > 0) {
item--;
} else {
item = lv_roller_get_option_cnt(roller) - 1;
}
lv_roller_set_selected(roller, item, LV_ANIM_OFF);
lv_roller_get_selected_str(roller, buf, sizeof(buf));
lv_label_set_text(label_roller, buf);
}
static void event_btn_down_cb(lv_event_t *e)
{
lv_obj_t *roller = (lv_obj_t *)e->user_data;
uint16_t item = lv_roller_get_selected(roller);
if (item < lv_roller_get_option_cnt(roller) - 1) {
item++;
} else {
item = 0;
}
lv_roller_set_selected(roller, item, LV_ANIM_OFF);
lv_roller_get_selected_str(roller, buf, sizeof(buf));
lv_label_set_text(label_roller, buf);
}
通过尝试发现在按键的事件回调函数里面直接设置文本是可以刷新的,目前还不太清除是什么原因,如果有大佬看到希望可以指点迷津,万分感谢!