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 に答える