2013-09-29 3 views
2

기본 텍스트 값으로 시작하는 TextView가 있으며, 사용자가 수행 한 작업에 따라 버튼을 클릭하면 TextView의 텍스트가 코드에서 변경되어야합니다. 충분히 단순 해 보이지만 나는 문제가있다.TextView의 텍스트를 동적으로 변경합니다.

현재 사용자가 텍스트 변경을 트리거하는 제출 버튼을 클릭하면 텍스트 값을 변경하는 대신 원래 텍스트보기 아래에 새 텍스트가 추가됩니다. 거의 새로운 TextView를 추가하는 것과 같습니다. 여기

이 작업을 수행하는 코드입니다 :

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

나는 또한 행운과 함께,이 방법을 시도 :

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

lblSlogan는 텍스트 뷰입니다. 내가 놓친 게 있니? 나는 invalidate()없이 시도했지만, 아무것도 변경되지 않았다.

감사합니다.

- 편집 -

그것은 내가 자 마린과 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 = ""; 
      } 
     }; 
+1

무효화를 호출 할 필요가 없습니다. – hakanostrom

답변

2

당신이 당신의 텍스트 뷰에 방법 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 
    } 
}); 
+0

응답 해 주셔서 감사합니다. 이것은 내가 시도한 것으로, 당신이 소리를내는 것처럼 간단해야한다고 생각했지만, 어떤 이유로 든 여전히 문제가 있습니다. Java가 아닌 Xamarin에서 C#을 사용하고 있다는 점에 유의해야합니다. 원래 게시물에 코드를 추가했습니다. – user1704677

+1

귀하의 질문을 편집했습니다, 당신은 C# 개발자를 위해 보이기 위해 태그 C#을 추가해야합니다 :) 나는 당신이 자바와 C#에 익숙하다면, 내 대답은 자바에있는 이유는 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() 

"=="이 아닌 "같음"을 사용해야합니다.

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

음, 아마도 내가 Equals() 함수를 사용해야한다는 것입니다. 그러나 코드의이 부분은 디버거를 통해 단계별로 실행될 때 작동합니다. – user1704677

1

여기에 몇 가지 요점이 있습니다.

저는 개인적으로 Xamarin이 제공하는 내장 된 추상 메소드를 사용합니다. 그들은 훨씬 더 일관된 결과를주는 경향이 있습니다. 단순히 Textview의 .Text 속성에 새 값을 할당 할 수 있습니다. IE

textView.Text = newValue; 

C#에서는 문자열 비교를 위해 .Equals 연산자를 사용할 필요가 없습니다. 그것은 엄격하게 Java 요구 사항입니다. 이 [link] (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); 
관련 문제