繁体   English   中英

动态更改TextView的文本

[英]Dynamically changing the text of a TextView

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

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

这是执行此操作的代码:

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

我也这样尝试过,没有运气:

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

lblSlogan是一个TextView。 我想念什么吗? 我也尝试了不使用invalidate()的情况,但这也没有改变。

谢谢。

-编辑-

请务必注意,我在Xamarin中使用C#。 不是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 = "";
            }
        };

我不明白为什么要在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 
   }
});

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

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

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

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

这里有几点。

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

textView.Text = newValue;

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

将侦听器分配给按钮,然后在该侦听器中使用setText()方法添加文本(或通过appendText()进行添加。)

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

您可以在此处添加“动态查看”文本。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM