2

アプリケーションのスピナーを別のスレッドで埋めようとしています。somoeneは、次のコードが機能しない理由を教えてくれますか?

次のコードはoncreate()メソッドにあります

Thread asyn = new Thread(){
       public void run(){
           try{
               int klok = 0;
               while(klok < 5000){
                   sleep(100);
                   klok = klok + 100;
               }

                try{



                   String[] items = new String[] {"One", "Two", "Three"};
                  ArrayAdapter<String> adapter = new ArrayAdapter<String>(Materiaal.this, android.R.layout.simple_spinner_item, items);
                  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                  spinner1.setAdapter(adapter);



                    }catch(Exception ex){
                       ex.printStackTrace();
                    }finally{
                        //adapter.notifyDataSetChanged();

                    }

           }catch(InterruptedException ex){
               ex.printStackTrace();
           }

       }
    };

    asyn.start();
4

3 に答える 3

2

アクティビティからメソッド runOnUiThread(Runnable r) を使用する必要があると思います。

たぶん、このようなことをします

void run()
{
    // do stuff
    .
    .
    .
     activity.runOnUiThread(new Runnable()

         void run()
         {
             spinner1.setAdapter(adapter);
         }

     );
}

私はそれが役立つことを願っています..

于 2012-01-04T17:04:40.340 に答える
1

UIスレッド以外のスレッドを介してUIを更新できないため、エラーが発生していると確信しています。

目的を達成するには、AsyncTask(http://developer.android.com/resources/articles/painless-threading.html)を使用し、メソッドで作業を行いdoInBackground()、最後にメソッドのインターフェイスを更新する必要がありますonPostExecute()

于 2012-01-04T17:04:59.373 に答える
1

間違ったスレッド例外から View touch を取得している必要があります。
メイン スレッド以外から UI 操作を実行する場合は、runOnUi(YOUR_RUNNABLE) を使用する必要があります。

于 2012-01-04T17:03:08.943 に答える