Android:TextView setText仅在第一次运行

时间:2016-09-30 02:39:14

标签: android

每次进入主要活动时,下面的代码都将被执行并且工作正常(这意味着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个活动。

1 个答案:

答案 0 :(得分:0)

如果需要在代码的这一部分中始终设置TextView:

if (indexStatus.getVisibility() != View.VISIBLE) {
    indexStatus.setVisibility(View.VISIBLE);
}

然后删除if部分。