java - 为什么仅在 Java 中缺少 R.string.cancel/ok?
问题描述
XML(作品):
android:text="@android:string/ok"
android:text="@android:string/cancel"
Java(作品):
R.string.some_string_that_I_have_added_to_strings_xml
Java(不起作用:找不到符号变量取消/确定):
R.string.cancel
R.string.ok
…即使它们在 https://developer.android.com/guide/topics/ui/dialogs 的示例中使用并显示在https://developer.android.com/reference/android/R.string。
我也试过import android.R.string;
没有区别。
那么编译器为什么会抱怨它们丢失了,我该如何解决呢?
解决方案
您可能正在导入(在文件顶部)your.package.name.R
,其中没有ok
或cancel
,所以当R.string.ok
. 当您添加时import android.R.string;
,您可以访问系统值string.ok
,而不是R.string.ok
(因为您可能仍在导入应用程序R
并且所有应用程序都R.string...
在引用它)。尝试android.R.string.cancel
直接在代码中使用,无需任何额外的导入,以强制使用 Android 系统资源,而不是应用程序自己的资源。
您也可以使用import android.R
自己的包R
,但请注意,您必须编写your.package.name.some_string_that_I_have_added_to_strings_xml
代码来访问自己的资源(因为只能R
导入一个,其他的必须使用完整包编写)。更方便和最常见的方法是R
在文件顶部导入自己的包,然后在代码中R.string
对自己的资源使用前缀,对系统资源使用简短的android.R.string
“完整”前缀
(这也扩展到c的所有其他类型的资源)
推荐阅读
- java - 注入依赖后仍然面临同样的问题请指导我
- php - 迁移到 Homestead 后在 PhpStorm 中为 Laravel 运行测试
- android - 每年11月的最后一个星期五打电话
- mql4 - OrderClosePrice 返回与历史池不同的价格
- php - 无法获取经过身份验证的数据
- c# - 在 C# 中创建网络服务器,但使用 Firebase 身份验证
- python - 如何将小部件链接到 Tkinter 中的函数
- python - 现有 NLP 模型的测试
- python - ModuleNotFoundError:没有名为“tensorflow_quantum”的模块
- java - 本机库在某些 JVM 上无法正常工作