2011-06-04 74 views
1

以下是這種情況:我需要在ListActivity中運行一些冗長的非UI代碼,然後讓此ListActivity更新UI以包含此冗長方法(列表)的結果。我需要一個ProgressDialog運行,直到完成,這樣用戶纔有一些反饋。Android線程問題

下面的代碼:

public class SolutionListActivity extends ListActivity 
{ 

    private String[] solutions; 
    private String letters; 
    private ProgressDialog dialog; 
    private static Solver solver; 


    /** Called when the activity is first created. 
    * @param savedInstanceState 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

      //Get the selected letters from LettersActivity 
     letters = getIntent().getStringExtra("letters"); 

     dialog = ProgressDialog.show(this, "Please Wait...", 
        "Searching Words...", true); 



     new Thread() 
     { 
      @Override 
      public void run() 
      { 
       if (solver == null) 
       { 
        solver = new Solver(SolutionListActivity.this); 
        solver.readDictionary(0); 
        solver.readDictionary(1); 
       } 
       solutions = solver.solve(letters); 

       runOnUiThread(new Runnable() 
       { 
        @Override 
        public void run() 
        { 
         dialog.dismiss(); 
         //Set up a UI List 
         setListAdapter(new ArrayAdapter<String>(SolutionListActivity.this, R.layout.list_item, solutions)); 

         ListView lv = getListView(); 
         lv.setTextFilterEnabled(true); 


        } 
       }); 

      } 
     }.start(); 

問題是我的ProgressDialog不會解僱我不能肯定是否UI使用它setListAdapter(new ArrayAdapter<String>(SolutionListActivity.this, R.layout.list_item, solutions));

任何意見前solutions = solver.solve(letters);將完成你們會有幫助的。

謝謝你, Calum

回答

3

你試過的AsyncTask?它的構建完全是爲了進行線程化,並能夠在UI線程中更新內容。

到這裏看看:http://developer.android.com/resources/articles/painless-threading.html

+0

嗯......其實我試過,這樣過,但我已經忘記了它,因爲現在的工作我一定是不使用它的權利。絕對年齡雖然...非常感謝。 – 2011-06-04 18:40:51