我在表单中有一个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()的预期序列?
答案 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");
}
});
这应该可以解决问题。