3

我有一个以默认文本值开头的 TextView,然后根据用户的操作,当单击按钮时,TextView 的文本需要在代码中更改。看起来很简单,但我遇到了问题。

目前,发生的情况是当用户单击触发文本更改的提交按钮时,新文本只是被添加到原始 TextView 下的屏幕中,而不是简单地更改文本值。这几乎就像是在添加一个新的 TextView。

这是执行此操作的代码:

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

我也尝试过这种方式,但没有运气:

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

lblSlogan 是一个文本视图。我错过了什么吗?我也尝试了不使用 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 = "";
            }
        };
4

5 回答 5

2

我不明白您为什么要invalidate()在 TextView 上调用该方法,否则,像这样的简单代码应该可以工作(在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 
   }
});
于 2013-09-29T16:44:56.760 回答
1

我认为你的问题是这样的:

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

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

(answerBox.Text.ToLower()).Equals( currentSlogan.Company.ToLower())
于 2013-09-30T01:21:10.500 回答
1

这里有几点。

我个人使用 Xamarin 提供的内置抽象方法。他们往往会给我更一致的结果。您可以简单地将新值分配给 Textview 的 .Text 属性。IE

textView.Text = newValue;

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

于 2013-10-01T05:28:41.567 回答
0

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

findViewById(R.id.button2).setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            text.setText("This is new text");
        }
    });
于 2013-09-29T16:46:43.533 回答
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);
于 2014-03-26T12:38:28.023 回答