等待UI工作结束(Android)

时间:2014-11-06 20:52:08

标签: android android-asynctask

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

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

然后我看到第一个动作实际上是在第二个动作之后执行的。我的猜测是,微调器动作被置于某种不能立即启动的异步作业中。我的目标是等到第一个动作完成后再运行第二个动作。 有谁知道如何实现这个目标?

在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();

2 个答案:

答案 0 :(得分:0)

事实上,这在Android中很常见:您无法保证所有操作都会以同步模式发生 - 也就是您在代码中执行它们的顺序 - 当它们是事件驱动时。

我认为您应该尝试在您的微调器上添加OnItemSelectedListener()侦听器,并查看此事件是否也在捕捉您的操作:someSpinner.setSelection(0);

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
    }

});

让我知道这是否可行。

谢谢, 保罗

答案 1 :(得分:0)

感谢您的快速回答,保罗。

我在微调器上已经有一个OnItemSelectedListener。在该侦听器内部,在一种情况下,我正在执行someEditText.setEnabled(false)。并且因为命令不是在同步模式下执行,我的第一篇文章的第二个动作(someEditText.setEnabled(true);)没有效果: - /

我发现通过调用someSpinner.setSelection(0,false);它正在someEditText.setEnabled(true)之前执行;但我不想依赖这个“解决方案”...