android - 如何在 Android TextView 中更改文本

标签 android textview

我试过这样做

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    t=new TextView(this); 

    t=(TextView)findViewById(R.id.TextView01); 
    t.setText("Step One: blast egg");

    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    t.setText("Step Two: fry egg");

但由于某种原因,我运行它时只显示第二个文本。我认为这可能与 Thread.sleep() 方法阻塞有关。那么有人可以告诉我如何“异步”实现计时器吗?

谢谢。

最佳答案

您的onCreate()方法有几个巨大的缺陷:

1) onCreate 准备您的 Activity - 因此,在此方法完成之前,您在此处所做的任何操作都不会对用户可见!例如 - 您将永远无法更改 TextView的文本在这里超过 ONE 次,因为只会绘制最后一次更改,因此用户可以看到!

2) 请记住,Android 程序将 - 默认情况下 - 仅在 ONE 线程中运行!因此:永远不要使用 Thread.sleep()Thread.wait()在您负责您的 UI 的主线程中! (阅读 "Keep your App Responsive" 了解更多信息!)

您的 Activity 初始化所做的是:

  • 你无缘无故地创建了一个新的 TextView对象 t !
  • 您选择布局的 TextView在变量 t稍后。
  • 您设置了 t 的文本(但请记住:它只会在 onCreate() 完成并且应用程序的主事件循环运行后才会显示!)
  • 您在 onCreate 中等待 10 秒方法 - 绝对不能这样做,因为它会停止所有 UI Activity ,并且肯定会强制 ANR(应用程序无响应,请参阅上面的链接!)
  • 然后您设置另一个文本 - 此文本将在您的 onCreate() 后立即显示方法完成和其他几个Activity lifecycle方法已处理完毕!

解决办法:

  1. onCreate() 中只设置一次文本- 这必须是第一个可见的文本。

  2. 创建一个RunnableHandler

    private final Runnable mUpdateUITimerTask = new Runnable() {
        public void run() {
            // do whatever you want to change here, like:
            t.setText("Second text to display!");
        }
    };
    private final Handler mHandler = new Handler();
    
  3. 将此可运行文件安装为处理程序,可能在 onCreate() 中(但请阅读以下我的建议):

    // run the mUpdateUITimerTask's run() method in 10 seconds from now
    mHandler.postDelayed(mUpdateUITimerTask, 10 * 1000);
    

建议:确保您知道 Activity的生命周期!如果你在 onCreate() 中做类似的事情这只会发生在您的 Activity第一次创建的! Android 可能会保留您的 Activity即使看不见,也能活得更久! 当用户再次“启动”它时——它仍然存在——你将不再看到你的第一个文本!


=> 始终在 onResume() 中安装处理程序并在 onPause() 中禁用它们!否则,当您的 Activity 时,您将获得“更新”。根本看不到! 在您的情况下,如果您想在重新激活时再次看到您的第一个文本,则必须将其设置为 onResume() ,而不是 onCreate() !

关于android - 如何在 Android TextView 中更改文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2300169/

相关文章:

android - 呈现问题无法找到以下类 - android.support.v7.widget.AppCompatTextView

android - 有没有办法让 ellipsize ="marquee"总是滚动?

android - 如果可能的话,填充空格的动态 TextView

Android:在不在缓存文件夹/临时文件中创建副本的情况下从我的应用程序共享大文件(图像、文档等...)

android - 如何在 RecyclerView 列表项中包含多个 TextView

java - addAction 总是将 actor 原点旋转 0,0,为什么?

java - Android - 套接字超时

java - com.google.firebase.database.DatabaseException : Can't convert object of type java. lang.String 输入 com.example.myapplication.Orders

android - 如何在Android的TextView中使文本居中垂直在一行中

android - 在 Android 中旋转文本