我正在获取上下文菜单项的标题,然后将其与字符串进行比较。下面的代码似乎没有按预期工作,为什么?
@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
导致“编辑”。那么为什么上面的代码导致“不匹配”?
但是,下面的代码似乎工作正常,
@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);
}
答案 0 :(得分:2)
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()
对getText()
返回的可编辑实例应用tge toString()。
你可以写下来:
if (item.getTitle().equals(R.string.item_edit_text.getText().toString())){
或者:
if (item.getTitle().equals(getString(R.string.item_edit_text))){
答案 1 :(得分:2)
这是我发现的,似乎在解释。
Context中的getString(int)
方法及其子类(如Activity)专门用于查找应用程序中包含的字符串资源,并以字符串资源id作为参数来知道哪个资源为找。同样,在Java中,此参数似乎只是一个普通的整数。
String.valueOf(int)
完全不同。它是一个Java库函数,它接受一个整数并产生该整数的String表示,例如String.valueOf(5)
返回&#34; 5&#34;。它对获取Android字符串资源没有用。
答案 2 :(得分:0)
String.valueOf()
返回传递给它的int参数的字符串表示形式。并且您已将Resource id传递给该方法。因此该方法将返回String表示而不是您期望的资源。您应该使用getString(R.string.item_edit_text)
。