我創建了一個測試android應用程序,它監聽RabbitMQ服務器上的主題並在textview中顯示消息。TextView在更新和滾動上繪製文本亂碼
所有的工作都很好,除了在添加到'輸出'textview的每條新消息上,新文本都被繪製在舊文本上。滾動時會發生同樣的情況,如第二張圖片所示。當應用程序轉到背景並再次激活時,文本再次顯示正常(請參見圖片1)。
我的佈局非常簡單:我究竟做錯了什麼?
<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>
這裏是我處理在一個新的消息來了:
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);
}
};
我完全按照你的描述做了,首先生成一個全屏活動,而不是正常的改變,而且樣式仍然是全屏。不幸的是,當項目關閉時(我們不再需要測試代碼),我無法再測試代碼。我認爲你的分析和解決方案是正確的。 – bluevoid 2013-07-27 14:41:11