2012-06-26 70 views
1

我在表单中有一个微调窗口和EditText窗口小部件。该onItemSelected的微调器设置为与所选项目价值的EditText文本..Android窗口小部件中的异步事件处理问题

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"); 

但在上面的代码中的最后一条语句没有任何影响,因为从onItemSelectedsetText()之后叫。我知道这可能发生由于异步,但是有没有办法控制它来强制调用setText()的预期序列?

回答

0

大概有更好的解决办法,而是速战速决将做到这一点:

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

需要设置等是决赛,并确保您的UI线程上运行et.setText()

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

这应该做的伎俩。