我使用PreferenceActivity
并实施onPreferenceChange
方法。
我正在检查哪些首选项已更改,因此我可以对其进行操作,但.equals()
方法仍会返回false。我调试了应用程序,它显示两个字段都返回字符串student_id
。我错过了什么吗?
此时,更改来自student_id_key
首选项更改
来自strings.xml
<string name="student_id_key" translatable="false">student_id</string>
onPreferenceChange
if(preference.getKey().equals(preference.getContext().getString(R.string.student_id_key))){
//do something here, but its returning false
}
这是我的prefs.xml
中元素的摘录 <EditTextPreference
android:capitalize="words"
android:defaultValue="@string/student_id_default"
android:inputType="textCapWords"
android:hint="@string/student_id_hint"
android:key="@string/student_id_key"
android:maxLines="1"
android:maxLength="9"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/pref_title_display_name" />
答案 0 :(得分:3)
使用字符串比较,总是使用.equals,因为==永远不会(很少,除非你将相同的变量与自身进行比较)才能用于字符串,因为它们是不可变的。
编辑: 所以,我认为这是因为你没有该块内的代码(或任何重要的代码)。在该块中添加print语句并查看是否打印。编译器优化了死代码,因此它可能会让你觉得奇怪的事情发生时却确实没有。将equals check输入一个布尔值,看看它是如何计算的。