【发布时间】:2014-02-16 23:43:06
【问题描述】:
我对如何使用 Async 感到困惑。我希望它在单击按钮后立即更新 UI,而不必终止活动并重新实例化它。在后台,我希望它等待单击以更新 UI,并在单击后确定是否单击了正确的按钮。我正在使用布尔 isUserRight();确定答案是否正确,然后我使用 resetButtons();重置按钮(显然)然后 setButtons();更改按钮。我把方法都写出来了,我只是不知道如何将它们实现到异步中。我需要立即更新 UI 以更改按钮的颜色。我不需要任何方法、按钮颜色等方面的帮助,只需要 Async,我也没有要求任何人给我喂食,只要稍微推动我去哪里。任何帮助都会很好,谢谢大家!
TL;DR 需要在使用异步推送按钮后更新 UI,这样按钮颜色就不会卡住,我也不必重新启动 Activity 来更新 UI。我不需要完整的代码,只需要一些关于去哪里的指导。
编辑:添加了一些代码。
这是在我的 onCreate();
buttons[0] = (Button)findViewById(R.id.b0);
buttons[1] = (Button)findViewById(R.id.b1);
buttons[2] = (Button)findViewById(R.id.b2);
buttons[3] = (Button)findViewById(R.id.b3);
buttons[0].setOnClickListener(this);
buttons[1].setOnClickListener(this);
buttons[2].setOnClickListener(this);
buttons[3].setOnClickListener(this);
然后在我的 onClick 下,我有一个用于所有按钮的开关:
public boolean isUserRight() {
if(correct == 1) {
onButton();
return true;
//Toast.makeText(getApplicationContext(), "Good job!", Toast.LENGTH_SHORT).show();
//buttons[test].getBackground().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);
}
onButton();
return false;
}
public void onButton() {
int rnd = new Random().nextInt(buttons.length);
test = rnd;
buttons[rnd].getBackground().setColorFilter(Color.YELLOW, PorterDuff.Mode.MULTIPLY);
//ResetButtons();
}
这很好用,唯一的问题是在单击第一个按钮后,颜色停止变化并得到更新。
【问题讨论】:
-
如果我理解正确,你不应该使用 Async 来做你想做的事。如果您在问题中添加一些代码,这将很有用。无论如何,您是否在按钮上设置了 OnClickedListener,您是否在其中更新 UI?
-
是的,我在按钮上放了一个监听器。我的问题是我更改了按钮的颜色,但 UI 没有更新,所以按钮颜色保持之前的颜色,直到你点击另一个按钮,基本上它落后了一步。我只需要一些东西来立即刷新 UI,这样颜色就会立即改变。
-
发布代码“是的,我在按钮上放置了一个监听器。我的问题是我更改了按钮的颜色,但 UI 没有更新”。因为刘是对的。你一定是做错了什么,或者有些事情你没有告诉我们。在您发布代码之前,我们不会知道实际发生了什么。将 AsyncTask 用于类似的事情是矫枉过正的。应该不需要它。
-
@StephanBranczyk 你去。用一些代码更新了帖子,希望这会有所帮助。
标签: android