2012-01-04 9 views
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(); 
+0

あなたの問題は何ですか?何かエラーが出ていますか? – kosa

答えて

2

私は、アクティビティからメソッドrunOnUiThread(Runnable r)を使うべきだと思います。

はたぶん

1

であるあなたは、ビューが間違ったスレッドの例外から触れ取得する必要があります。
メインスレッド以外のUI操作を実行する場合は、runOnUi(YOUR_RUNNABLE)を使用する必要があります。

1

は、私はあなたが他のスレッドを介したUIを更新することはできませんので、あなたが抱えているエラーがあるかなり確信している..私はそれが役に立てば幸いこの

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

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

    ); 
} 

ような何かを行うことUIスレッドではありません。

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

関連する問題