【问题标题】:Dynamically changing the text of a TextView动态更改 TextView 的文本
【发布时间】:2014-03-26 21:01:01
【问题描述】:

我有一个 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 = "";
            }
        };

【问题讨论】:

  • 无需调用invalidate。

标签: c# android xamarin textview


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。这是我尝试过的,我认为它应该像你说的那样简单,但由于某种原因我仍然遇到麻烦。需要注意的是,我将 C# 与 Xamarin 一起使用,而不是 Java。我在原始帖子中添加了更多代码。
  • 我已经编辑了你的问题,你应该添加标签 c# 以便对 c# 开发人员可见:),我不是 c# 开发人员,这就是为什么我的答案是在 java 中,如果你熟悉java和c#,可以轻松将上面的代码转换成c#代码
【解决方案2】:

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

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

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

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

【讨论】:

  • 嗯,你可能是对的,我应该使用 Equals() 函数。但是,当我使用调试器单步执行这部分代码时,它正在工作。
【解决方案3】:

这里有几点。

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

textView.Text = newValue;

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      您可以在此处动态添加文本视图。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-22
        • 2019-02-18
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多