Fragment中读取OColumn定义的state_order值显示False,如何解决?
解决OSelection列读取后显示False的问题
你遇到的问题是因为state_order是OSelection类型的列,直接用row.getString()读取会因为数据类型不匹配返回错误的布尔值。下面是具体的解决方法:
核心原因
你定义的state_order是OSelection类型,这类列的存储逻辑和普通字符串列不同——它内部关联了选项的标识(比如draft)和显示标签(比如New),但直接调用getString()时,底层会错误地把它解析成布尔值,所以才会显示False。
两种解决方案
方案一:直接获取显示标签(推荐)
ODataRow提供了专门的方法来获取OSelection列的显示文本,用getSelectionLabel()就能直接拿到你定义的标签:
public void onViewBind(View view, Cursor cursor, ODataRow row) { // 直接获取对应选项的显示标签 String stateText = row.getSelectionLabel("state_order"); OControls.setText(view, R.id.state, stateText); }
方案二:手动映射标识到标签
如果你需要先拿到内部标识再做额外处理,可以先获取原始标识,再手动映射到显示文本:
public void onViewBind(View view, Cursor cursor, ODataRow row) { String stateValue = row.getString("state_order"); String stateLabel; // 手动匹配你定义的选项映射 switch(stateValue) { case "draft": stateLabel = "New"; break; case "paid": stateLabel = "Paid"; break; case "cancel": stateLabel = "Cancelled"; break; case "done": stateLabel = "Posted"; break; case "invoiced": stateLabel = "Invoiced"; break; default: stateLabel = stateValue; // 未知值时显示原始标识 break; } OControls.setText(view, R.id.state, stateLabel); }
为什么之前的代码会出问题?
getString()方法是为普通字符串列设计的,对于OSelection这种特殊类型的列,它无法正确解析关联的选项数据,反而会返回错误的布尔值(False)。使用专门的getSelectionLabel()方法才能正确获取你想要的显示文本。
内容的提问来源于stack exchange,提问作者Caludio
相关产品推荐
相关产品推荐

