繁体   English   中英

在Android中将字符串与字符串提取进行比较

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM