等待UI作业结束(Android)
我的问题是:当我调试代码时,例如: someSpinner.setSelection(0); someEditText.setEnabled(true) 然后我看到第一个动作实际上是在第二个动作之后执行的。我的猜测是,微调器操作放在某种异步作业中,不会立即启动。我的目标是等待第一个操作完成,然后运行第二个操作。 有人知道如何实现这一点吗 在Eclipse RCP中,我解决了这个问题,类似于以下内容:等待UI作业结束(Android),android,android-asynctask,Android,Android Asynctask,我的问题是:当我调试代码时,例如: someSpinner.setSelection(0); someEditText.setEnabled(true) 然后我看到第一个动作实际上是在第二个动作之后执行的。我的猜测是,微调器操作放在某种异步作业中,不会立即启动。我的目标是等待第一个操作完成,然后运行第二个操作。 有人知道如何实现这一点吗 在Eclipse RCP中,我解决了这个问题,类似于以下内容: uiJob1.addJobChangeListener(new JobChangeAda
uiJob1.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if (event.getResult().isOK()) {
uiJob2.schedule();
} else {
...
}
}
});
// 2
uiJob2.addJobChangeListener(new JobChangeAdapter() {
@Override
public void done(IJobChangeEvent event) {
if (event.getResult().isOK()) {
...
} else {
...
}
}
});
uiJob1.schedule();
事实上,这对于Android来说是很常见的:当它们是事件驱动的时候,你不能保证所有的动作都会以同步模式发生——也就是你在代码中执行它们的顺序 我认为您应该尝试在微调器上添加一个
OnItemSelectedListener()
侦听器,并查看此事件是否也捕获您的操作:someSpinner.setSelection(0)代码>
spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图selectedItemView、整型位置、长id){
//你的代码在这里
}
@凌驾
未选择公共无效(AdapterView父视图){
//你的代码在这里
}
});
让我知道这是否可行
谢谢,
保罗谢谢你的快速回答,保罗
我已经在微调器上有一个OnItemSelectedListener。在该侦听器中,有一种情况下,我正在执行someEditText.setEnabled(false)。由于这些命令不是在同步模式下执行的,因此我的第一篇文章的第二个操作(someEditText.setEnabled(true);)无效:-/
我通过调用someSpinner.setSelection(0,false)发现了这一点;它在someEditText.setEnabled(true)之前执行;但我不想依赖这个“解决方案”…你的想法是错误的。但是不能说什么是正确的方法,因为你没有说为什么以及你想做什么。在多线程的asycnh OOP环境中,等待UI更新完成肯定是一个有缺陷的设计。你能给我发一些代码吗?我对这种情况非常感兴趣,希望尝试使用getViewTreeObserver()。
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
// your code here
}
@Override
public void onNothingSelected(AdapterView<?> parentView) {
// your code here
}
});