我的代码没有等待用户点击,我不知道该怎么做。请看评论。我正在制作卡片游戏,其中有3个电脑播放器和一个用户。但我不知道如何等待用户点击任何卡然后在循环的每次迭代中播放。这是我的粗略代码。谢谢提前。
inp=0,k=0; //global variable
function onCreate()
{
added listner to 13 imageviews
A(); // call to A()
}
function A()
{
// I want to wait here to get updated value of inp when user clicks image to
// perform some operation with inp and remove that imageView.
k++;
if(k<13)
A();
}
function onClick(view)
{
switch:
case img1:
inp=0;
break;
case img2:
inp=2;
break;
case img3:
inp=3;
break;
.
.
.
.
13 cases
}
答案 0 :(得分:1)
不要在onCreate方法中调用函数A()。 在发生单击事件时调用它,在设置inp = something之后在onClick方法结束时调用它,然后在函数A()中使用该值,使用该值执行操作。
答案 1 :(得分:0)
尝试rxjava,很容易观察到inp
值已更改然后执行您的愿望功能,例如:
private int inp = 0;
private BehaviorSubject<Integer> intValueObserve;
private void inpValueChangedCallBack() {
intValueObserve = BehaviorSubject.create(inp);
intValueObserve.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.d("TAG", "new value: " + integer.intValue());
// perform `remove image view` here
}
});
}
...
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home_activity);
inpValueChangedCallBack();
}
....
@Click(R.id.add_record)
void add() {
inp++;
intValueObserve.onNext(inp); // adding this into the end of your onClick function
Log.d("TAG", "increase inp: " + inp);
}
日志作为我的测试:
D/TAG: new value: 1
D/TAG: increase inp: 1
D/TAG: new value: 0
D/TAG: decrease intp: 0
D/TAG: new value: 1
D/TAG: increase inp: 1
D/TAG: new value: 2
D/TAG: increase inp: 2
希望这有帮助!
答案 2 :(得分:0)
Android几乎与每个GUI操作系统一样,都是事件驱动的。这意味着后台有一个事件循环。那个事件循环完成了所有的等待。你永远不应该等待任何事情 - 事实上如果你试着冻结UI线程并且没有响应,从不回应输入。操作系统将调用您在事件发生时注册的点击监听器。这是事件驱动编程的基本思想 - 操作系统会告诉您事件何时发生。
答案 3 :(得分:-1)
如果你想等待尝试使用Thread.Sleep();
while(condition == true)
{
try {
Thread.Sleep(Time);
} catch(InterruptedException e){}
}