[英]Filling spinner in different thread
我试图在另一个线程中填充应用程序中的微调框。 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();
我认为您应该使用Activity中的方法runOnUiThread(Runnable r)。
也许做这样的事情
void run()
{
// do stuff
.
.
.
activity.runOnUiThread(new Runnable()
void run()
{
spinner1.setAdapter(adapter);
}
);
}
希望对您有所帮助。
您必须从错误的线程异常中获取对View的感动。
当您想从主线程之外执行任何UI操作时,应使用runOnUi(YOUR_RUNNABLE)。
我很确定您遇到的错误是因为您无法通过不是UI线程的其他线程来更新UI。
为了完成你想要什么,你应该使用的AsyncTask( http://developer.android.com/resources/articles/painless-threading.html ),做你的工作,在doInBackground()
方法,并终于在方法更新界面onPostExecute()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.