Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待UI作业结束(Android)_Android_Android Asynctask - Fatal编程技术网

等待UI作业结束(Android)

等待UI作业结束(Android),android,android-asynctask,Android,Android Asynctask,我的问题是:当我调试代码时,例如: someSpinner.setSelection(0); someEditText.setEnabled(true) 然后我看到第一个动作实际上是在第二个动作之后执行的。我的猜测是,微调器操作放在某种异步作业中,不会立即启动。我的目标是等待第一个操作完成,然后运行第二个操作。 有人知道如何实现这一点吗 在Eclipse RCP中,我解决了这个问题,类似于以下内容: uiJob1.addJobChangeListener(new JobChangeAda

我的问题是:当我调试代码时,例如:

someSpinner.setSelection(0); someEditText.setEnabled(true)

然后我看到第一个动作实际上是在第二个动作之后执行的。我的猜测是,微调器操作放在某种异步作业中,不会立即启动。我的目标是等待第一个操作完成,然后运行第二个操作。 有人知道如何实现这一点吗

在Eclipse RCP中,我解决了这个问题,类似于以下内容:

    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
    }

});