2012-06-26 69 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"); 
    } 
}); 

這應該做的伎倆。