2013-09-29 5 views
2

У меня есть 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 = ""; 
      } 
     }; 
+1

Не нужно вызывать invalidate. – hakanostrom

ответ

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

Спасибо за ответ. Это то, что я пробовал, и я подумал, что это должно быть так просто, как вы его озвучили, но по какой-то причине у меня по-прежнему возникают проблемы. Важно отметить, что я использую C# с Xamarin, а не Java. Я добавил больше кода в свой оригинальный пост. – user1704677

+1

Я отредактировал ваш вопрос, вы должны добавить тег C#, чтобы быть видимым для разработчиков C# :), я не разработчик C#, поэтому мой ответ в java, если вы знакомы с java и C#, вы можете легко преобразовать код выше в код C# – Houcine

0

Присвоить слушателю кнопки и в этом слушателю вы добавляете текст с SetText() метод (или appendText() для добавления ..)

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

Я думаю, ваша проблема заключается в следующем:

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

Вы должны использовать «equals», а не «==».

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

Ну, вы, вероятно, правы в том, что я должен использовать функцию Equals(). Однако эта часть кода работает, когда я перехожу к нему с помощью отладчика. – user1704677

1

Несколько пунктов здесь.

Лично я использую встроенные абстрактные методы, которые предоставляет Xamarin. Они, как правило, дают мне гораздо более последовательные результаты. Вы можете просто присвоить новое значение свойству .Text Textview. IE

textView.Text = newValue; 

В C# вам не нужно использовать оператор .Equals для сравнения строк. Это строго требование Java. См. Это [ссылка] (Why would you use String.Equals over ==?).

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); 
Смежные вопросы