Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android小部件中的异步事件处理问题_Android_Asynchronous_Spinner - Fatal编程技术网

Android小部件中的异步事件处理问题

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

我在表单中有一个微调器和EditText小部件。微调器的
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");
   }
});
这应该能奏效