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

Android Studio Java中隐藏含SharedPreferences值的TextView失效如何解决

问题根因与解决方案

你的代码存在三个核心问题,和TextView的数据源是不是SharedPreferences无关,只要修复逻辑即可正常隐藏视图:

1. 字符串比较方式错误

Java中==比较的是两个字符串对象的内存地址,而非实际内容。你从SharedPreferences取出的字符串和常量"null"不属于同一个对象,哪怕内容完全一致,==判断也会返回false,导致隐藏逻辑不触发。
正确写法需要用equals()方法比较内容,推荐把常量写在前面避免空指针:
比如把order1.getToppingName1() == "null"修改为"null".equals(order1.getToppingName1())。
同时你的CheckChart方法中order1.getFoodName() == "null"、CheckCartStats.getCart1Status() == "Full"、FoodType == "null"这些判断都存在同样问题,需要同步修改。

2. 分支判断逻辑错误

你在RemoveViewForUnusedTopping()方法中使用else if串联了所有配料的判断规则,这会导致只要第一个配料(Topping1)的判断条件命中,后续第2到第10个配料的判断逻辑会被直接跳过,永远不会执行,自然不会生效。
你需要把所有的else if拆分为独立的if判断,让每个配料的判断互不影响:

private void RemoveViewForUnusedTopping() {
    Order1 order1 = sharedPrefmanager.getInstance(getActivity()).GetOrder1();
    // Topping 1 独立判断
    if ("null".equals(order1.getToppingName1())){
        TxtvCart1Topping1.setVisibility(GONE);
        TxtvCart1ToppingPrice1.setVisibility(GONE);
        TxtvRp1.setVisibility(GONE);
    } else {
        TxtvCart1Topping1.setVisibility(VISIBLE);
        TxtvCart1ToppingPrice1.setVisibility(VISIBLE);
        TxtvRp1.setVisibility(VISIBLE);
    }
    // Topping 2 独立判断,不与上一个判断串联
    if ("null".equals(order1.getToppingName2())){
        TxtvCart1Topping2.setVisibility(GONE);
        TxtvCart1ToppingPrice2.setVisibility(GONE);
        TxtvRp2.setVisibility(GONE);
    } else {
        TxtvCart1Topping2.setVisibility(VISIBLE);
        TxtvCart1ToppingPrice2.setVisibility(VISIBLE);
        TxtvRp2.setVisibility(VISIBLE);
    }
    // 剩余3-10号配料全部按照上述格式修改为独立if判断即可
}

3. 空值兼容问题

如果你在SharedPreferences中存储的默认值是null对象,而非字符串"null",当前判断也会失效,可以调整判断逻辑兼容两种情况:
order1.getToppingName1() == null || "null".equals(order1.getToppingName1())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:15:06