我创建了一个测试Android应用程序,该应用程序侦听RabbitMQ服务器上的主题并在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);
}
};
答案 0 :(得分:1)
我遇到了同样的问题。就我而言,这就是发生的事情以及我是如何解决的:
首先我添加了具有全屏属性的第二个活动(通过 eclipse精灵)
然后我决定不使用那个花哨的动画全屏,所以我 编辑了布局XML文件并将其更改为普通相对视图。
应用清单文件表明此活动仍在使用 全屏主题。
我删除了那些行......问题解决了。
如果您为布局设置全屏主题,请尝试将其更改为应用主题。
答案 1 :(得分:0)
尝试从所有情况下删除invalidate()方法调用,如果它没有解决问题,在xml中将它放在ScrollView属性的TextView&#39; s(id = output)中
android:cacheColorHint="#00000000"