我在做一个记忆片假名的游戏,就像打鼹鼠一样,我有九个按钮,可以 Flink 显示正确或错误的答案。
我有两个文本视图。一个显示罗马字和其他片假名。我需要他们改变同步。
我有一个arrayList包含romaji,另一个包含对应的片假名,它们的索引排成一行。例如romaji = [a,i,u,e,o] katakana = [,,,]
我使用下面的方法来选择要显示的片假名和罗马字。
public void QandA(){
synchronized (this){
pickFromArray = ThreadLocalRandom.current().nextInt(0, arraySize);
textView29.setText(listromT.get(pickFromArray));
hintView.setText(listT.get(pickFromArray));}
}
如果QandA是我在处理程序中运行的唯一方法(通过runnable),textView将同步更改。
然而,如果我运行使按钮 Flink 的runnables,textview将会改变为不同步。eidogg。它可能会显示“a”与“oriese "。
我猜textView不同步是因为计算机正在处理textView命令之间的九个按钮,我希望synchronize命令会强制CPU将QandA方法作为不间断块读取,但它们仍然不同步。
我如何正确使用它?或者我应该使用另一个命令来代替它?
谢谢
编辑:
我有一个SetQuestion runnable,可以递归运行。
在onCreate中:
handler.postDelayed(SetQuestion, 0);
SetQuestion可运行:
public Runnable SetQuestion = new Runnable() {
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Qtimer++;
if (Qtimer%10==1){
QandA();
}
if (Qtimer%10==6){
QandA();
}
if (Qtimer>199){
Qtimer=110;
}
handler.postDelayed(this, 1000);
}
});
}
};
我也尝试过使用QandA的TimerTasks来改变按钮,但我得到了同样的结果。罗马字和片假名的变化不同步,尽管按钮看起来工作正常(即颜色和文本同步变化)。
1条答案
按热度按时间nom7f22z1#
我设法用另一种方法解决了这个问题。
我放弃了尝试在QandA方法中设置hintView,而是创建了以下方法,并将其放在按钮的所有runnables中。