动态更改TextView的文本

3
我有一个TextView,它最初具有默认文本值,然后根据用户的操作,在单击按钮时需要更改TextView的文本。这似乎很简单,但我遇到了问题。
目前的情况是,当用户单击提交按钮触发更改文本时,新文本只会添加到原始TextView下面,而不是简单地更改文本值。就像添加了一个新的TextView一样。
以下是执行此操作的代码:
lblSlogan.Invalidate();
lblSlogan.SetText(currentSlogan.Slogan, TextView.BufferType.Normal);

我也尝试了这种方式,但没有成功:
lblSlogan.Invalidate();
lblSlogan.Text = currentSlogan.Slogan;

lblSlogan是一个TextView。我有什么遗漏吗?我也尝试过不使用invalidate(),但也没有改变任何内容。

谢谢。

-- 编辑 --

需要注意的是,我正在使用Xamarin的C#。这是我的按钮点击方法。这就是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
5个回答

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 
   }
});

感谢您的回复。这就是我尝试过的,我认为它应该像您所说的那样简单,但出于某些原因我仍然遇到了麻烦。需要注意的是,我正在使用Xamarin的C#,而不是Java。我已经在我的原始帖子中添加了更多代码。 - user1704677
1
我已经编辑了你的问题,你应该添加C#标签,以便C#开发人员能够看到它:),我不是C#开发人员,这就是为什么我的答案是用Java编写的。如果你熟悉Java和C#,你可以很容易地将上面的代码转换成C#代码。 - Houcine

1
我认为你的问题是这个:


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

你应该使用“equals”,而不是“==”。
(answerBox.Text.ToLower()).Equals( currentSlogan.Company.ToLower())

嗯,你可能是对的,我应该使用Equals()函数。然而,当我通过调试器逐步执行代码时,这部分代码是有效的。 - user1704677

1
这里有几个要点。
个人而言,我使用Xamarin提供的内置抽象方法。它们往往给我更一致的结果。您只需将新值分配给Textview的.Text属性即可。例如:
textView.Text = newValue;

在C#中,您不需要使用.Equals运算符进行字符串比较。这严格是Java的要求。请参见此[链接](为什么要使用String.Equals而不是==?)。

0

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

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

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接