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

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

也许做这样的事情

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

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

     );
}

我希望它有帮助..

于 2012-01-04T17:04:40.340 回答
1

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

于 2012-01-04T17:03:08.943 回答
1

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

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

于 2012-01-04T17:04:59.373 回答