比较android

时间:2017-01-15 19:56:59

标签: java android string types comparison

我正在获取上下文菜单项的标题,然后将其与字符串进行比较。下面的代码似乎没有按预期工作,为什么?

@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);
}

3 个答案:

答案 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)