2010-12-19 3 views
-1

왜 이것이 작동하지 않는지 잘 모릅니다. TextView는 뷰의 태그에서 정의됩니다. 기본 TextView에 텍스트가 설정되어 있지 않아 표시 화면에 설정하려고합니다.TextView.setText()에 이어 TextView.invalidate()가보기의 텍스트를 업데이트하지 않습니다.

아래에 onCreate 및 onStart를 배치했지만 작동하지 않는 것 같습니다. 마지막 두 줄은 디버깅 용입니다. 헤더가 텍스트를 가져 오는 지 확인할 수 있습니다. 사실, TextView는 실제로 업데이트되지 않습니다. 어떤 아이디어?

TextView header=(TextView) findViewById(R.id.acheader); 
     header.setText(R.string.accounts); 
     header.invalidate(); 
     header=(TextView) findViewById(R.id.acheader); 
     String blah=(String) header.getText(); 
+0

여기서는'header.invalidate();'가 필요 없다고 생각합니다. 레이아웃 xml에'TextView' 선언을 게시 하시겠습니까? –

+0

이 문제는 Java 코드가 아니라 merge 및 include 사용 방법을 잘못 해석 한 것으로 나타났습니다. 기본적으로 루트가 태그 인 약간의 레이아웃을 포함하는 경우 태그를 통해 id를 재정의 할 수 없습니다. 그래서 저는 실제로 올바른 TextView를 가져 오지 않았습니다. 나는 계층 뷰어를 통해 이것을 발견했다. – jfelectron

답변

0

다시 4 줄의 텍스트를 제거하십시오 헤더 = (텍스트 뷰) findViewById를 (R.id.acheader);

0
  1. header.invalidate()가 필요하지 않습니다.

  2. 대신 String blah = (String) header.getText() try String blah = heager.getText(). toString();

왜 코드를 사용하여 텍스트보기에서 "setText()"를 확인하고 있습니까? 실제 출력을 확인할 수없는 이유는 무엇입니까?

텍스트보기의 다시 그리기가 프레임 워크에서 처리되고 일반적으로 항목 업데이트 (더티 사각형이 특정 됨)를 그룹화하고 모두 업데이트하려고하기 때문에 위 코드가 사용하려고하는 방식대로 작동하지 않을 수 있습니다. 일단. 함수를 종료 한 후에도 잘 수행 할 수 있습니다. 시각적으로 유효성 검사를 시도하면 가장 좋은 방법입니다.

+0

나는 시각적으로 시각을 보았다. 코드 체크인의 요점은 실패가 어디에서 발생했는지 확인하는 것이 었습니다. 또한 .toString()과 캐스팅은 개인용 IMO이며 내부 char []에서 toString 메서드에 의해 캐스팅됩니다. – jfelectron

+0

하지만 TextView의 텍스트도 장식이있는 Spannable 일 수 있으므로 항상 '내부 char []'가 아닙니다. – Axarydax

관련 문제