动态更改TextView的文本

时间:2013-09-29 16:28:49

标签: c# android xamarin 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 = "";
            }
        };

5 个答案:

答案 0 :(得分: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 
   }
});

答案 1 :(得分:1)

我认为你的问题是:

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

你应该使用“等于”,而不是“==”。

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

答案 2 :(得分:1)

这里有几点。

我个人使用Xamarin提供的内置抽象方法。他们倾向于给我更一致的结果。您只需将新值分配给Textview的.Text属性即可。 IE

textView.Text = newValue;

在C#中,您不需要使用.Equals运算符来进行字符串比较。这完全是Java的要求。见[link](Why would you use String.Equals over ==?)。

答案 3 :(得分:0)

将侦听器分配给按钮,并在该侦听器中使用setText()方法(或appendText()添加文本以进行追加..)

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

答案 4 :(得分: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);