首页 > 解决方案 > 为什么仅在 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;没有区别。

那么编译器为什么会抱怨它们丢失了,我该如何解决呢?

标签: javaandroid

解决方案


您可能正在导入(在文件顶部)your.package.name.R,其中没有okcancel,所以当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的所有其他类型的资源)


推荐阅读