1

我在表单中有一个 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() 的预期顺序?

4

1 回答 1

0

可能有几个更好的解决方案,但一个快速的解决方法是这样做:

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

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

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

这应该够了吧。

于 2012-06-26T17:06:49.403 回答