uTu*_*Fan 3 android android-preferences
要在Android首选项中存储整数,我会直观地EditTextPreference执行常规的String-int-String转换.
但后来我遇到了一段代码,它存储了一个整数<ListPreference>:
<ListPreference
android:key="@string/total_score"
android:defaultValue="0" />
Run Code Online (Sandbox Code Playgroud)
并使用.检索它 preferences.getInt(getString(R.string.total_score), 0);
这真的有用吗?如果是这样,怎么样?
这被认为是可接受的做法吗
更新:感谢下面的答案,我已经能够找到getInt()的实现源代码.我在这里发布它是为了方便参考:
jint android::content::SharedPreferences::getInt(local_ref< java::lang::String > const &a0, jint a1)
{
return call_method<
android::content::SharedPreferences::J2CPP_CLASS_NAME,
android::content::SharedPreferences::J2CPP_METHOD_NAME(2),
android::content::SharedPreferences::J2CPP_METHOD_SIGNATURE(2),
jint
>(get_jobject(), a0, a1);
}
Run Code Online (Sandbox Code Playgroud)
小智 9
理论上,是的,你可以存储一个整数ListPreference.毕竟,它是一个UI首选项,它将用户显示的label/key(android:entries)android:entryValues映射到内部值(),并在列表视图中显示所有这些映射选项.内部值也可能是整数.您可以使用<integer-array>-resource作为entryValues.
在实践中,我从未见过这项工作 - 它被窃听了.
当然,您可以将int值设置为代码中的首选项键ListPreference,因为它在内部是正常的首选项.但这会破坏预定义资源数组的整个目的以及从列表中进行选择的能力.作为一种解决方法,如果一个int数组会很方便,我建议使用a <string-array>作为值并在代码中将它们转换为整数,就像你使用EditTextPreference
请查看此问题以获取非工作示例.;)
要回答您的标题问题选择哪一个整数:取决于.
您可以使用任何一种解决方法.
如果用户应该能够输入任何值(或者只是很多值),那么这EditTextPreference就是要走的路.A ListPreference只会太长.
如果您有一小组预定义的整数,请使用a ListPreference.这样使用起来更舒服,可能会显示有用的标签.示例:如果用户应该选择一个计时间隔,您可以映射值中的秒数并显示不同的标签,例如一小时[值3600; 标签"小时"].
编辑:还了解了您的代码段可能与之相关的位置.由于这ListPreference既没有指定android:entries也没有android:entryValues,它可能只是默认首选项文件的一部分.您可以使用PreferenceManager.setDefaultValues()XML文件重置/初始化所有首选项键.在这种情况下,您选择的首选项是完全随机的,因为所有计数的字段都是android:key和android:defaultValue.在这种情况下,您可以使用任何其他类型,无关紧要.
| 归档时间: |
|
| 查看次数: |
4209 次 |
| 最近记录: |