在我的应用程序中,当用户写错字符时,我的edittext变为红色然后它变成了写。实际上我正试图让红色闪烁。这是我的工作代码
class BlinkTask extends AsyncTask<EditText, Boolean, Boolean>
{
@Override
protected Boolean doInBackground(EditText... params) {
EditText et1=params[0];
try {
et1.setBackgroundColor(Color.RED);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
et1.setBackgroundColor(Color.WHITE);
}
catch (Exception e)
{
e.printStackTrace();
}
return true;
}
}
但是当我拿到et1.setBackgroundColor(Color.WHITE); out-try-block block.It没有错误,但不幸的是myapp已经停止。我检查了loggat但没有看到任何内容。这是假代码 BlinkTask类扩展了AsyncTask {
@Override
protected Boolean doInBackground(EditText... params) {
EditText et1=params[0];
try {
et1.setBackgroundColor(Color.RED);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
et1.setBackgroundColor(Color.WHITE);
return true;
}
}
我不知道为什么它需要try-catch,尽管它没有错误。
还要ı想要为这个任务创建一个asynctask类是一个很好的解决方案或者其他什么都可以做。谢谢你
答案 0 :(得分:1)
您应该使用animations来实现此目的。
答案 1 :(得分:0)
AsyncTask不在UI线程上运行,因此无法触及UI组件。但是这样做有一个技巧。
class BlinkTask extends AsyncTask<EditText, Integer, Boolean>
{
private EditText et1;
@Override
protected Boolean doInBackground(EditText... params) {
et1 = params[0];
try {
publishProgress(Color.RED);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
publishProgress(Color.WHITE);
}
catch (Exception e)
{
e.printStackTrace();
}
return true;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
et1.setBackgroundColor(values[0]);
}
}
但说实话,在asynctask中更改edittext的背景颜色是个坏主意。使用时应该看看动画。
答案 2 :(得分:0)
我认为因为你现在在主线程的不同主题中,编辑文本是UIthread的一个元素,那么你必须在UIthread中使用你的代码。
你可以搜索“如何在java android中使用runonUIthread”。
希望这对你有所帮助。