簡體   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