2013-09-29 184 views
2

我有一個TextView,它以默認文本值開始,然後根據用戶的操作,單擊按鈕時需要在代碼中更改TextView的文本。似乎很簡單,但我遇到了問題。動態更改TextView的文本

目前,當用戶點擊觸發文本更改的提交按鈕時,新文本只是添加到原始TextView下的屏幕上,而不是僅僅更改文本值。這幾乎就像添加了一個新的TextView一樣。

下面是執行此代碼:

lblSlogan.Invalidate(); 
lblSlogan.SetText(currentSlogan.Slogan, TextView.BufferType.Normal); 

我也嘗試過這種方式,沒有運氣:

lblSlogan.Invalidate(); 
lblSlogan.Text = currentSlogan.Slogan; 

lblSlogan是一個TextView。我錯過了什麼嗎?我也試過沒有invalidate(),但是這也沒有改變。

謝謝。

- 編輯 -

需要注意的是我使用C#與Xamarin是很重要的。不是Java。這是我按鈕的點擊方法。這是TextView更改發生的地方。

btnOk.Click += delegate(object sender, EventArgs e) 
     { 
      if (answerBox.Text.ToLower() == currentSlogan.Company.ToLower()) 
      { 
       // correct answer 
       currentUserScore += currentSlogan.Points; 
       currentSlogan.Answered = true; 
       DatabaseBuffer.MarkSloganAnsweredAndUpdateScore(currentSlogan, currentUserScore); 
       currentSlogan = DatabaseBuffer.GetNextUnansweredSlogan(currentSlogan.ID); 
      } 

      if (currentUserScore >= pointsToPass) 
      { 
       // user has beaten level 
      } 
      else 
      { 
       lblSlogan.SetText(currentSlogan.Slogan, TextView.BufferType.Normal); 
       answerBox.Text = ""; 
      } 
     }; 
+1

無需調用invalidate。 – hakanostrom

回答

2

我不明白爲什麼你在你的TextView調用方法invalidate(),否則,一個簡單的像這樣的代碼,就可以(在onCreate()方法添加此代碼):

setContentView(R.layout.main); 
TextView lblSlogan = (TextView) findViewById(R.id.lblSlogan); 
Button btnChangeSlogan = (Button) findViewById(R.id.btnChangeSlogan); 

btnChangeSlogan.setOnClickListener(new OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
     lblSlogan.setText("Put your new text here");// cal setText() in the onclick method when ever you want to change the text 
    } 
}); 
+0

感謝您的迴應。這是我所嘗試過的,我認爲它應該儘可能簡單,但是由於某種原因,我仍然遇到麻煩。請注意,我使用Xamarin而不是Java使用C#。我在原始文章中添加了更多代碼。 – user1704677

+1

我編輯了你的問題,你應該添加標籤C#爲了讓C#開發人員可見:),我不是C#開發人員,這就是爲什麼我的答案是在Java中,如果你熟悉Java和C#你可以很容易地將上面的代碼轉換爲C#代碼 – Houcine

0

分配監聽器按鈕,並在監聽你用的setText(添加文本)方法(或AppendText通過()用於追加..)

findViewById(R.id.button2).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      text.setText("This is new text"); 
     } 
    }); 
1

我覺得你的問題是這樣的:

answerBox.Text.ToLower() == currentSlogan.Company.ToLower() 

您應該使用「等於」而不是「==」。

(answerBox.Text.ToLower()).Equals(currentSlogan.Company.ToLower()) 
+0

嗯,你可能是對的,我應該使用Equals()函數。然而,當我用調試器遍歷它時,這部分代碼正在工作。 – user1704677

1

這裏有幾點。

我個人使用Xamarin提供的內置抽象方法。他們傾向於給我更一致的結果。您可以簡單地將新值分配給Textview的.Text屬性。 IE

textView.Text = newValue; 

在C#中,您不需要使用.Equals運營商做字符串比較。這完全是Java的要求。看到這個[link](Why would you use String.Equals over ==?)。

0

在這裏您可以添加文本查看動態。

var aLabel = new TextView (this); 
aLabel.Text = "Hello Text!!!"; 
aLabel.SetTextSize (Android.Util.ComplexUnitType.Dip, 15f); 
RelativeLayout ll = new RelativeLayout(this); 
ll.AddView(aLabel);