Android小部件中的异步事件处理问题
我在表单中有一个微调器和EditText小部件。微调器的Android小部件中的异步事件处理问题,android,asynchronous,spinner,Android,Asynchronous,Spinner,我在表单中有一个微调器和EditText小部件。微调器的onItemSelected为具有选定项值的EditText设置文本 spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Edit
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");
spinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
EditText txt2=(EditText)findViewById(R.id.txt2);
System.out.println(“从已选择的设置”);
setText(((TextView)视图).getText().toString());
}
});
旋转器。选择(sel);
spinner.setEnabled(false);
EditText et=(EditText)findViewById(R.id.txt2);
System.out.println(“从外部选择的设置”);
et.setText(“测试”);
但是上面代码中的最后一条语句没有效果,因为在它之后调用了
onItemSelected
中的setText()
。我知道这可能是由于异步造成的,但是有没有办法控制它来强制执行预定的调用setText()的顺序?可能有几种更好的解决方案,但快速修复方法是:
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");
}
});
这应该能奏效