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