首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新CustomContainer子TouchGFX

更新CustomContainer子TouchGFX
EN

Stack Overflow用户
提问于 2020-03-02 11:34:13
回答 1查看 501关注 0票数 0

如果我有一个包含2个文本区的CustomContainer,是否可以在运行时更新这些文本区的文本?请注意,自定义容器位于滚动列表中。

EN

回答 1

Stack Overflow用户

发布于 2021-09-17 14:37:17

是的,这是可能的。也许这个迟来的答案可以帮助一些人。

我有一个屏幕,上面列出了实际失败的自定义小部件。自定义容器有4个文本区:日期、时间、错误组件、错误文本。在这里,我以3种方式设置文本,日期和时间的文本是从数字时间值生成的,标题的文本是从资源中读取的,错误详细信息文本的文本是从资源中读取的,但是值是随后填充的。

在屏幕上的内容无效后,无论是通过滚动还是通过调用invalidate,都会从touchgfx运行时自动调用回调函数xxxUpdateItem。您必须在屏幕的视图类中覆盖并实现它。调用此函数时会引用自定义小部件和当前项目的实际索引,如下所示:

代码语言:javascript
复制
void MessageScreenView::scrollList1UpdateItem(CustomContainerFailureOrInfo& item, int16_t itemIndex)  

从这里调用设置新文本的自定义小部件的函数,例如:

代码语言:javascript
复制
void CustomContainerFailureOrInfo::setDetails(uint16_t itemIdx, uint32_t dateTime, uint16_t captionTextId, uint16_t detailTextId, const char16_t * templateF1, float f1, const char16_t * templateF2, float f2)
{
    setDateTime(dateTime);
    setCaption(captionTextId);
    setDetailText(detailTextId, templateF1, f1, templateF2, f2);
}

日期和时间文本是从time_t值生成的。标题是使用文本小部件的setTypedText函数从资源中读取的,例如:

代码语言:javascript
复制
void CustomContainerFailureOrInfo::setCaption(TypedTextId t)
{
    caption.setTypedText(TypedText(t));
    caption.setWideTextAction(WIDE_TEXT_WORDWRAP);
    caption.invalidate();
}

我有一个问题,一些错误消息应该显示错误相关的值,而其他错误消息应该只显示plein文本。我通过使用值通配符并传递格式字符串和值来解决这个问题:

代码语言:javascript
复制
void CustomContainerFailureOrInfo::setDetailText(TypedTextId t, const char16_t * templateF1, float f1, const char16_t * templateF2, float f2)
{
    text.setTypedText(TypedText(t));
    Unicode::snprintf(textBuffer1, TEXTBUFFER1_SIZE, "");
    if (templateF1)
    {
        if (awiStrUtil::isPrintfFloatContained16(templateF1))
        {
            Unicode::snprintfFloat(textBuffer1, TEXTBUFFER1_SIZE, reinterpret_cast<const Unicode::UnicodeChar *> (templateF1), f1);
        }
        else
        {
            // attention: (const char16_t*)
            Unicode::snprintf(textBuffer1, TEXTBUFFER1_SIZE, reinterpret_cast<const Unicode::UnicodeChar *> (templateF1));
        }
    }
    // similar code removed: if (templateF2) ...
    text.setWideTextAction(WIDE_TEXT_WORDWRAP);
    text.invalidate();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60482207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档