Android 如何在单击文本视图时更改文本之前设置延迟?

Android 如何在单击文本视图时更改文本之前设置延迟?,android,Android,因此,在我的应用程序中,我想点击一个文本视图,文本更改,延迟3秒,然后将文本更改回原始状态。这是我到目前为止所拥有的 final TextView fact1 = (TextView) findViewById(R.id.fact1); fact1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {

因此,在我的应用程序中,我想点击一个文本视图,文本更改,延迟3秒,然后将文本更改回原始状态。这是我到目前为止所拥有的

        final TextView fact1 = (TextView) findViewById(R.id.fact1);
        fact1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fact1.setText("Text");
            //Delay
            fact1.setText(Original text here, its stored in a text view with the id fact1);

        }
    });

如何在文本视图切换之间进行延迟?

您可以像下面这样使用
倒计时:

String firstText=mTextField.getText().toString();
  new CountDownTimer(30000, 1000) {       
    public void onTick(long millisUntilFinished) { 

           mTextField.setText("seconds remaining: " +               millisUntilFinished / 1000); //here you can have your logic to set text to edittext

   } 

public void onFinish() { 
mTextField.setText(firstText); }

 }.start();

您可以像这样使用
倒计时

String firstText=mTextField.getText().toString();
  new CountDownTimer(30000, 1000) {       
    public void onTick(long millisUntilFinished) { 

           mTextField.setText("seconds remaining: " +               millisUntilFinished / 1000); //here you can have your logic to set text to edittext

   } 

public void onFinish() { 
mTextField.setText(firstText); }

 }.start();

您只需要在线程中运行代码并调用thread.sleap

    Button button = (Button) findViewById(R.id.button);
    final TextView textView = (TextView) findViewById(R.id.textView2);
    final String[] originalText = {""};
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Thread() {
                @Override
                public void run() {
                    originalText[0] = textView.getText().toString();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText("what ever!!");
                        }
                    });
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(originalText[0]);
                        }
                    });
                }
            }.start();
        }
    });
通过使用lambda,代码将更加简洁

    Button button = (Button) findViewById(R.id.button);
    final TextView textView = (TextView) findViewById(R.id.textView2);
    final String[] originalText = {""};
        button.setOnClickListener(view -> {
        new Thread() {
            @Override
            public void run() {
                originalText[0] = textView.getText().toString();
                runOnUiThread(() -> textView.setText("what ever!!"));

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                runOnUiThread(() -> textView.setText(originalText[0]));
            }
        }.start();
    });

您只需要在线程中运行代码并调用thread.sleap

    Button button = (Button) findViewById(R.id.button);
    final TextView textView = (TextView) findViewById(R.id.textView2);
    final String[] originalText = {""};
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new Thread() {
                @Override
                public void run() {
                    originalText[0] = textView.getText().toString();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText("what ever!!");
                        }
                    });
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(originalText[0]);
                        }
                    });
                }
            }.start();
        }
    });
通过使用lambda,代码将更加简洁

    Button button = (Button) findViewById(R.id.button);
    final TextView textView = (TextView) findViewById(R.id.textView2);
    final String[] originalText = {""};
        button.setOnClickListener(view -> {
        new Thread() {
            @Override
            public void run() {
                originalText[0] = textView.getText().toString();
                runOnUiThread(() -> textView.setText("what ever!!"));

                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                runOnUiThread(() -> textView.setText(originalText[0]));
            }
        }.start();
    });

没有理由为此创建新的
线程。只需在
TextView
上使用
postDelayed

fact1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final String originalText = fact1.getText().toString();
        fact1.setText("New Text");
        fact1.postDelayed(new Runnable() {
            @Override
            public void run() {
                fact1.setText(originalText);
            }
        }, 3000);
    }
});

没有理由为此创建新的
线程。只需在
TextView
上使用
postDelayed

fact1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        final String originalText = fact1.getText().toString();
        fact1.setText("New Text");
        fact1.postDelayed(new Runnable() {
            @Override
            public void run() {
                fact1.setText(originalText);
            }
        }, 3000);
    }
});


简单的线程。睡眠。使用动画、定时器或在布局XML中选中
android:hint
,是否有任何文档可提供帮助?或者更简单的新处理程序(Looper.getMainLooper).postDelayeD(newrunnable(//在这里更改您的文本),您的延迟);如果你只搜索一分钟就找到了几种方法…简单的Thread.sleep。使用动画、定时器或在布局XML中选中
android:hint
,是否有任何文档可提供帮助?或者更简单的新处理程序(Looper.getMainLooper).postDelayeD(newrunnable(//在这里更改您的文本),您的延迟);如果你只需搜索一分钟就找到了几种方法…当我完成搜索后,如何将文本恢复到原始文本?我想让它改变5秒钟,然后回到原来的状态。下面是我的例子。public void onClick(View v){Handler handlerTimer=new Handler();new CountDownTimer(300001000){public void onTick(long millisuntilfished){fact1.setText(“Memes”);}public void onFinish(){fact1.setText();}}.start();}在启动计时器之前,请更改文本并在onFinish方法中检索最后一个文本。您可以将第一个文本保存在字符串变量中。我将如何执行此操作?完成后,如何将文本恢复为原始文本?我希望它更改5秒钟,然后恢复到原来的状态。以下是我拥有的内容。public void onClick(视图v){Handler handlerTimer=new Handler();new CountDownTimer(300001000){public void onTick(long millisuntilfished){fact1.setText(“Memes”);}public void onFinish(){fact1.setText();}}.start();}在启动计时器之前,请更改文本并在onFinish方法中检索最后一个文本。您可以将第一个文本保存在字符串变量中。我该如何做?此代码是否会在之后将其更改回原始文本?@George Mulligan answer比我的好,请使用它。此代码是否会在之后将其更改回原始文本?@George Mulligan answer比m好伊恩,用它,这是“正确的”回答。帮你自己一个忙,不要做任何那些无意义的线程或倒计时。对于你的简单用例,它肯定不适用。格格,我在引号中加上了更正,因为我不会这样编码,因为它可能会造成内存泄漏。@Budius只是想确定你指的是
fact1
及其
Activity
等由
处理程序
内部使用的
postdayed
?通常我会使用自己的处理程序,当我知道
Activity
正在移到后台或不再使用时将其清除,但在这种情况下,它最多应该泄漏大约3秒钟?是的。这正是我所指的o、 在一个有700K MAU的应用程序中工作使我以一种极其预防性的方式编写代码。在野外发生了一些非常奇怪的事情。所以一般来说,我不做匿名内部类。甚至3秒泄漏计数。这是“正确的”回答。帮你自己一个忙,不要做任何那些无意义的线程或倒计时。对于你的简单用例,它肯定不适用。格格,我在引号中加上了更正,因为我不会这样编码,因为它可能会造成内存泄漏。@Budius只是想确定你指的是
fact1
及其
Activity
等由
处理程序
内部使用的
postdayed
?通常我会使用自己的处理程序,当我知道
Activity
正在移到后台或不再使用时将其清除,但在这种情况下,它最多应该泄漏大约3秒钟?是的。这正是我所指的o、 在一个有700K MAU的应用程序中工作使我以一种极其预防性的方式编写代码。在野外发生了一些非常奇怪的事情。所以一般来说,我不做匿名的内部类。甚至3秒钟的泄漏计数。