在不同的线程中填充微调器

时间:2012-01-04 16:51:22

标签: java android multithreading android-spinner

我试图在不同的线程中填充我的应用程序中的微调器。可以告诉我为什么以下代码不起作用?

以下代码位于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();

3 个答案:

答案 0 :(得分:2)

我认为你应该使用Activity中的方法runOnUiThread(Runnable r)。

也许做这样的事情

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

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

     );
}

我希望它有所帮助..

答案 1 :(得分:1)

您必须从错误的线程异常中获取View。
当你想从主线程以外的地方执行任何UI操作时,你应该使用runOnUi(YOUR_RUNNABLE)。

答案 2 :(得分:1)

我很确定您遇到的错误是因为您无法通过非UI线程的其他线程更新UI。

要完成您想要的任务,您应该使用AsyncTask(http://developer.android.com/resources/articles/painless-threading.html),在doInBackground()方法中完成工作,最后在方法onPostExecute()中更新您的界面。