我试图比较android中的文本以避免刷新文本(如果没有必要)(否则每50ms刷新不同字段的文本)。
使用普通文本不是问题。一切正常。 但是:如果文本中有数字,则文本似乎不相等。为什么呢?
一些例子: “Abschaltpunkt”等于“Abschaltpunkt”(OK)/ “Gewicht”等于“Gewicht”(OK)/ “100公斤”不等于“100公斤”(挪威克朗)/ “Abschaltpunkt 2”不等于“Abschaltpunkt 2”(NOK“
编辑后的新问题(比较现在工作正常)。 如您所见,我使用UI线程来刷新文本。这个应用程序在网络中工作,每秒接收300条消息与不同的数据(是的,这是必要的)。因此我需要比较,否则线程被阻止,应用程序将不响应用户输入。 还有其他解决方案吗?或者我的解决方案是好的?
这是我的代码:
/**
* Compares the current and new text und updates the text if necessary
* @param RessourceID given by R.id...
* @param New text
*/
private void ChangeText (final int RessourceID, final String sText) {
try {
TextView tv = (TextView) findViewById(RessourceID);
// Erst prüfen ob Text ersetzt werden muss -> Spart Rechenzeit
if (tv.getText().toString().equals(sText)) {
Log.e(this.getClass().getSimpleName(), "Text nicht ersetzen: " + tv.getText() + " != " + sText);
} else {
ChangeTextThread(tv, sText);
Log.e(this.getClass().getSimpleName(), "Text ersetzen: " + tv.getText() + " != " + sText );
}
} catch (Throwable t) {
Log.e(this.getClass().getSimpleName(), "ChangeText", t);
}
}
/**
* Change the text in UI tread
*/
private void ChangeTextThread (final TextView tv, final String sText) {
this.runOnUiThread(new Runnable() {
public void run() {
try {
tv.setText(sText);
} catch (Throwable t) {
Log.e(this.getClass().getSimpleName(), "ChangeTextThread", t);
}
}
});
}
答案 0 :(得分:3)
试试这种方式
if(tv.getText().toString().equals(sText))
使用.equals()
或.equalsIgnoreCase()
方法进行字符串比较
答案 1 :(得分:0)
尝试以下代码:
if(tv.getText().toString.equalsIgnoreCase(sText)){
//Do your stuff here
}