2013-04-25 1 views
1

RabbitMQ 서버에서 주제를 듣고 텍스트보기에 메시지를 표시하는 테스트 Android 앱을 만들었습니다.TextView 페인트 텍스트가 업데이트 및 스크롤 할 때 깨졌습니다.

'출력'textview에 추가 된 모든 새 메시지에서 새 텍스트가 이전 텍스트 위에 그려지는 것을 제외하고는 모두 잘 작동합니다. 두 번째 이미지에서 볼 수 있듯이 스크롤 할 때도 마찬가지입니다. 앱이 백그라운드로 이동하고 다시 활성화되면 텍스트가 다시 정상적으로 표시됩니다 (그림 1 참조).

normal output

garbled output

내 레이아웃은 정말 간단하다 : 내가 잘못 뭐하는 거지? ,이 문제가 해결되지 않을 경우 방법은 모든 경우에서() 호출 무효화를 제거

final Handler myViewUpdateHandler = new Handler() { 
    // @Override 
    public void handleMessage(Message msg) { 
     switch (msg.what) { 
     case NEWSTATUS: 
      status.setText((String) msg.obj); 
      status.invalidate(); 
      //also add to output 
     case NEWMESSAGE: 
      String oldText= (String) output.getText(); 
      output.setText(""); 

      String newText = DateUtil.getClockTimeMillis()+" "+(String) msg.obj+"\n"+oldText; 

      output.setText(newText); 
      output.invalidate(); 
      break; 
     default: 
      throw new IllegalArgumentException("no case for:" + msg.arg1); 
     } 
     super.handleMessage(msg); 
    } 
}; 

답변

1

나는 똑같은 문제가 있었어.

  • 전체 화면에서 처음 내가 추가 한 두 번째 활동합니다 ( 일식 마법사를 통해) 속성

  • 다음 내가 사용하지 않기로 결정 : 내 경우에는이 무슨 일이 있었는지 나는 그것을 밖으로 작동하는 방법이다 그 화려한 애니메이션 전체 화면, 그래서 나는
    레이아웃 XML 파일을 편집하고 일반 상대보기로 변경했습니다.

  • 앱 매니페스트 파일에서이 활동이 여전히 전체 화면 테마 을 사용하고 있음을 나타냅니다.

  • 해당 줄을 삭제했으며 문제가 해결되었습니다.

레이아웃의 전체 화면 테마를 설정하면 앱 기본 테마로 변경됩니다.

+0

당신이 묘사 한대로, 처음에는 전체 화면으로의 액티비티를 생성했습니다. 정상으로 변경하고 실제로 스타일은 여전히 ​​전체 화면이었습니다. 불행히도 프로젝트가 닫히면 더 이상 코드를 테스트 할 수 없습니다 (더 이상 테스트 코드가 필요 없습니다). 나는 당신이 yoiur 분석과 해결책에 있다고 생각합니다. – bluevoid

0

시도 :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="60dp" > 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Connection status" /> 

<TextView 
    android:id="@+id/status" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:saveEnabled="false" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Received messages:" /> 

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <TextView 
     android:id="@+id/output" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:saveEnabled="false" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 
</ScrollView> 
다음

나는 새 메시지가오고 처리되는 경우 귀하의 XML 에서이 넣어 TextView의 (ID = 출력) ScrollView 특성

android:cacheColorHint="#00000000" 
+0

의견을 보내 주셔서 감사합니다. 나는 분리되어 있고 함께 노력했다. 아아, 내 문제를 해결하지 못한다. 나는이 문제로 인해 수수께끼를 꾼다. 다른 앱에서는 결코 이런 일을하지 않았다. 이것은 간단해야합니까? – bluevoid

+0

일반적으로이 문제가 발생하지 않아야합니다. 이 문제를 일으킬 수있는 또 다른 문제는 처리기가 처리기의 빈도에 도달 할 수 없을 정도로 처리기가 너무 많이 새로 고쳐지면 아래 코드로 처리기의 빈도를 줄이십시오. 처리기 처리기 = 새 처리기(); 처리기.postDelayed (새의 Runnable() \t \t { \t \t \t \t \t \t 공공 무효 실행() \t \t \t { //이} 여기 당신의 업데이트 코드를 삽입}, 5000 (- 또는 다른 번호 -)를, 그것은 처리기가 5000msec마다 새로 고침한다는 의미이며, 너무 빠르거나 느린 경우 수정할 수 있습니다. –

+0

textview의 내용을 내 캐시로 사용하므로이 기능이 작동하지 않습니다. newText = DateUtil.getClockTimeMillis() + ""+ (문자열) msg.obj + "\ n"+ oldText; – bluevoid

관련 문제