2011-06-04 130 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