[英]Comparing a String to String extract in android
我正在获取上下文菜单项的标题,然后将其与字符串进行比较。 下面的代码似乎无法按预期工作,为什么?
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle().equals(String.valueOf(R.string.item_edit_text))){ // <-- compared to string extract
Toast.makeText(this, "Match",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "No Match",Toast.LENGTH_SHORT).show();
}
return super.onContextItemSelected(item);
}
item.getTitle
结果为“编辑”,而R.string.item_edit_text
为“编辑”。 那么,为什么上面的代码导致“ No Match”?
下面的代码似乎可以正常工作,但是,
@Override
public boolean onContextItemSelected(MenuItem item) {
if (item.getTitle().equals("Edit")){ // <--- Compared to hardcoded string
Toast.makeText(this, "Match",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "No Match",Toast.LENGTH_SHORT).show();
}
return super.onContextItemSelected(item);
}
R.string.item_edit_text
可能是EditText
类型的。
当你写:
String.valueOf(R.string.item_edit_text)
它最终返回R.string.item_edit_text.toString()
但R.string.item_edit_text.toString()
不返回EditText
的文本。
您应该执行R.string.item_edit_text.getText().toString()
将tge toString()应用于getText()
返回的Editable实例。
你可以这样写:
if (item.getTitle().equals(R.string.item_edit_text.getText().toString())){
要么:
if (item.getTitle().equals(getString(R.string.item_edit_text))){
这是我发现的,似乎在解释。
Context中的getString(int)
方法及其子类(例如Activity)专门用于查找应用程序中包含的字符串资源,并且它将字符串资源id作为参数来知道要查找的资源。 同样,在Java中,此参数似乎只是一个普通整数。
String.valueOf(int)
完全不同。 它是一个Java库函数,它接受一个整数并生成该整数的String表示形式,例如String.valueOf(5)
返回“ 5”。 它对于获取Android字符串资源没有用。
String.valueOf()
返回传递给它的int参数的字符串表示形式。 并且您已将资源ID传递给该方法。 因此,该方法将使该方法返回String表示形式,而不是您期望的资源。 您应该使用getString(R.string.item_edit_text)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.