Android小部件中异步事件处理的问题

时间:2012-06-26 16:42:41

标签: android asynchronous spinner

我在表单中有一个Spinner和EditText小部件。 Spinner的onItemSelected使用选定的项值设置EditText的文本。

spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        EditText txt2 = (EditText) findViewById(R.id.txt2);
        System.out.println("Setting from onItemSelected");
        txt2.setText(((TextView)view).getText().toString());
    }
});
spinner.setSelection(sel);
spinner.setEnabled(false);
EditText et = (EditText) findViewById(R.id.txt2);
System.out.println("Setting from outside onItemSelected");
et.setText("Testing");

但上面代码中的最后一个语句没有效果,因为setText()内的onItemSelected被调用。我知道这可能由于异步而发生,但有没有办法控制它来强制调用setText()的预期序列?

1 个答案:

答案 0 :(得分:0)

可能是几个更好的解决方案,但快速解决方法是:

    new Thread(){
       public void run(){
         try{
           Thread.sleep(1000);
         } catch(Exception e){}
           et.setText("Testing");
       }
     }.run();

需要将et设置为final,并确保您在UI线程上运行et.setText()

runOnUiThread( new Runnable(){
   public void run(){
     et.setText("Testing");
   }
});

这应该可以解决问题。