每次进入主要活动时,下面的代码都将被执行并且工作正常(这意味着indexStatus.setText(msg.obj.toString());
总是显示最新的消息)。
但是,如果我按back
按钮切换,然后切换到同一个屏幕(reBuildIndex
将再次运行),Log.d(TAG, msg.obj.toString());
工作正常,打印出最新的消息,但是indexStatus.setText
不起作用,最新的消息不会像我预期的那样显示。
这里发生了什么?有什么建议吗?
void rebuildIndex(boolean reCreate) {
final TextView indexStatus = (TextView) this.findViewById(R.id.index_status);
indexStatus.setVisibility(View.INVISIBLE);
indexStatus.setText(R.string.rebuild_index_progress_title);
final Handler statusHandler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.obj == null) {
indexStatus.setVisibility(View.GONE);
} else if (msg.obj.equals("show")) { // TODO quick demo, shouldn't use literal text.
indexStatus.setVisibility(View.VISIBLE);
} else {
Log.d(TAG, msg.obj.toString());
if (indexStatus.getVisibility() != View.VISIBLE) {
indexStatus.setVisibility(View.VISIBLE);
}
indexStatus.setText(msg.obj.toString());
indexStatus.invalidate();
}
return false;
}
});
Indexer.rebuildIndexIfNecessary(statusHandler, reCreate);
}
更新:
我在indexStatus.invalidate();
之后在第三个条件中添加了setText
,但也无效。
更新:
错误的消息在原始帖子中,我说按home
,但实际上是back
切换出来。 home
按钮切换/输出正常。
更新:
试图将处理程序作为全局变量放置,但不起作用。现在我禁用了back
个活动。
答案 0 :(得分:0)
如果需要在代码的这一部分中始终设置TextView:
if (indexStatus.getVisibility() != View.VISIBLE) {
indexStatus.setVisibility(View.VISIBLE);
}
然后删除if
部分。