我正在做一个记忆片假名的游戏。它就像打地鼠一样玩,我有九个闪烁的按钮来显示正确或错误的答案。
我有两个文本视图。一个显示罗马字,另一个显示片假名。我需要他们同步更改。
我有一个包含罗马字的 arrayList,另一个包含相应的片假名。他们的索引排成一行。 例如。罗马字 = [a, i, u, e, o] 片假名 = [ア,イ,ウ,エ,お]
我正在使用以下方法来选择要显示的片假名和罗马字。
public void QandA(){
synchronized (this){
pickFromArray = ThreadLocalRandom.current().nextInt(0, arraySize);
textView29.setText(listromT.get(pickFromArray));
hintView.setText(listT.get(pickFromArray));}
}
如果 QandA 是我在处理程序中运行的唯一方法(通过可运行的),则 textViews 会同步更改。
但是,如果我运行使按钮闪烁的可运行程序,textView 将变得不同步。例如。它可能会显示带有“お”的“a”。
我的猜测是 textViews 不同步,因为计算机正在处理 textViews 命令之间的九个按钮。我希望同步命令会强制 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);
}
});
}
};
我也尝试过将 TimerTasks 用于 QandA 并更改按钮,但我得到了相同的结果。罗马字和片假名的变化不同步,尽管按钮看起来工作正常(即颜色和文本同步变化)。
我设法用另一种方式解决了这个问题。
我放弃了在 QandA 方法中设置 hintView 的尝试。相反,我制作了以下方法并将其放入按钮的所有可运行程序中。
public void katakana(){
if (pickFromArray ==0){
hintView.setText("ア");
}
if (pickFromArray ==1){
hintView.setText("イ");
}
if (pickFromArray ==2){
hintView.setText("ウ");
}
if (pickFromArray ==3){
hintView.setText("エ");
}
if (pickFromArray ==4){
hintView.setText("オ");
}
}