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

