在android中比较文本

时间:2014-10-15 09:05:18

标签: android string textview comparison ui-thread

我试图比较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);
					  }
		  
				  }
				});
		}

2 个答案:

答案 0 :(得分:3)

试试这种方式

if(tv.getText().toString().equals(sText))

使用.equals().equalsIgnoreCase()方法进行字符串比较

答案 1 :(得分:0)

尝试以下代码:

if(tv.getText().toString.equalsIgnoreCase(sText)){
     //Do your stuff here
}