2012-05-08 5 views
0

以下は私のコードでは機能しません。理由はわかりません。"ビュー階層を作成した元のスレッドのみがそのビューに触れることができます。アンドロイドで私は私のリストビューLoadValues内側()メソッドのためのアダプタを設定したい... 「listView.setAdapter(アダプタ)」ProgressDialogのためにAndroidのアダプタリストがスレッド内で動作しない

public class ProgressDialogActivity extends Activity { 

    private ProgressDialog progressDialog; 
    private ListView listView; 
    private ArrayList<String> lstValores; 
    private Handler progressBarHandler = new Handler(); 

    private int mProgressStatus, mProgressTotal;  

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main);    

     lstValores = new ArrayList<String>(); 
     listView = (ListView) findViewById(R.id.listView1); 

     this.LoadValues(); 

    }//onCreate 


    public void LoadValues(){ 

     progressDialog = new ProgressDialog(ProgressDialogActivity.this); 
     progressDialog.setTitle("Aguarde.."); 
     progressDialog.setMessage("Cargando lista.."); 
     progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     progressDialog.setProgress(0); 
     progressDialog.show(); 

     new Thread(new Runnable() {   
      public void run() {   

       mProgressTotal = (int) 1000; 

       try { 
        for (int i = 0; i < mProgressTotal; i++) { 

         lstValores.add("valor " + i); 

         mProgressStatus = (int) ((i * 100)/mProgressTotal); 

         progressBarHandler.post(new Runnable() {       
          public void run() { 
           progressDialog.setProgress(mProgressStatus); 
           } 
          });     
         }// end for  

         ArrayAdapter<String> adapter = new ArrayAdapter<String>(ProgressDialogActivity.this, 
                       R.layout.textviewlist_layout, 
                       lstValores); 
         listView.setAdapter(adapter);      
         progressDialog.dismiss(); 

       } catch (Exception e) { 
        e.printStackTrace();     
       } 

      }// end run 
     }).start();// end Thread   
    }// end LoadValues 


} // Activity 

答えて

0

、唯一のUIスレッドビューに触れることができます。

ので

progressBarHandler.post(new Runnable() { 
    public void run(){ 
      listView.setAdapter(adapter);      
    }       
}      
+0

おかげChangweiが、それはまだアダプタを設定していません。.. – gustav12

関連する問題