2011-04-02 118 views
0

在我的應用程序中,我有一個用戶可以登錄的屏幕。登錄細節被髮送到網絡,一些數據被下載到微調器中。我爲應用程序實現了一個進度對話框,以便應用程序在訪問網絡和下載時不會鎖定應用程序。進度對話框似乎工作正常,但任務完成後似乎並沒有更新我的微調 - 我實際上必須單擊微調以顯示已下載的數據。 notifyDataSetChanged()方法似乎不起作用,如果我沒有任何線程,通常會默認顯示第一個項目。這是一些代碼。android線程 - 鎖定UI?

這將啓動progressdialog

pd = ProgressDialog.show(this, "Logging in...", "Please wait", true, false);  Thread thread = new 
Thread(this); thread.start(); 

run方法的代碼 - 在這裏微調數據集被改變

public void run() { 
    myMethodThatDoesStuff(); 
    handler.sendEmptyMessage(0); 
} 

和處理

private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     pd.dismiss(); 
    } 
}; 

最後,在該位myMethodThatDoStStuff改變微調數據集

aa=new ArrayAdapter<String>(this, 
           android.R.layout.simple_spinner_item); 
         //ADDING SOME DATA HERE 
//DATA ADDED 
         spin=(Spinner)findViewById(R.id.spinner); 
         spin.setOnItemSelectedListener(this); 
         aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin.setAdapter(aa); 
         aa.notifyDataSetChanged(); 

注:不穿這工作絕對沒問題

回答

0

我建議使用的AsyncTask。

private class CustomTask extends AsyncTask<Void, Void, Void> { 
    protected onPreExecute() { 
    pd = ProgressDialog.show(this, "Logging in...", "Please wait", true, false);  
    } 

protected Long doInBackground(Void... void) { 
    doCalculation() ; 
    ....  
} 

protected void onPostExecute(Long result) { 
    ..... 
    pd.dismiss(); 
    aa.notifyDataSetChanged(); 
} 

}

+0

當我使用這個確切的同樣的事情正在發生的事情裏面。 – 2011-04-02 16:46:04

0

你可以稱之爲pd.setVisibility(View.GONE)隱藏微調,處理程序代碼