You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fyne ListWithData使用自定义TapLabel滚动后条目显示乱序问题求助

问题原因

你遇到的滚动后字母显示乱序是Fyne自定义控件的典型错误:自定义继承了Fyne标准控件的组件时,没有调用ExtendBaseWidget方法完成自定义控件的注册,导致Fyne的列表控件复用Item时,无法正确触发自定义控件的UI刷新逻辑。

你点击能拿到正确值是因为数据绑定逻辑本身是正常的,只是UI渲染层没有正确更新显示内容,才出现了显示内容和实际绑定数据不一致的情况。

修复方案

只需要修改NewTapLabel构造函数,补充ExtendBaseWidget调用即可:

func NewTapLabel(text string, tappedLeft func(string)) *TapLabel {
    mc := &TapLabel{widget.NewLabel(text), tappedLeft}
    // 新增以下行,完成自定义控件注册
    mc.ExtendBaseWidget(mc)
    return mc
}

修改完成后重新运行,滚动时的显示顺序就会完全正常了。

补充优化建议

如果不想用绑定的方式更新内容,也可以直接在列表的UpdateItem回调中直接赋值文本,逻辑更直观:

list := widget.NewListWithData(
    data,
    func() fyne.CanvasObject {
        return NewTapLabel("template", alphabetToBrands)
    },
    func(i binding.DataItem, o fyne.CanvasObject) {
        // 直接读取绑定值设置文本,不需要走Bind方法
        str, err := i.(binding.String).Get()
        if err == nil {
            o.(*TapLabel).SetText(str)
        }
    },
)

内容的提问来源于stack exchange,提问作者alex_bits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:54:08