2012-04-25 20 views
0

我想實現一個線程,顯示進度列表之前加載listview這是一個源xml,但這樣做在一個線程是一個錯誤警告函數Lazy適配器需要有一個線程也想爲這個問題提出一些建議,謝謝。使用LazyAdapter和線程使用ProgressDialog的Listview

主營:僅在主線程

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

    handler = new Handler(); 
    new Thread(){    
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        progressDialog = ProgressDialog.show(MainActivity.this, "", "Loading...");      
       } 
      });    
      ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

       XMLParser parser = new XMLParser(); 
       String xml = parser.getXmlFromUrl(URL); // getting XML from URL 
       Document doc = parser.getDomElement(xml); // getting DOM element 

       NodeList nl = doc.getElementsByTagName(KEY_SONG); 


       for (int i = 0; i < nl.getLength(); i++) { 
        // creating new HashMap 
        HashMap<String, String> map = new HashMap<String, String>(); 
        Element e = (Element) nl.item(i); 
        // adding each child node to HashMap key => value 
        map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
        map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 
        map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST)); 
        map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION)); 
        map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL)); 

        // adding HashList to ArrayList 
        songsList.add(map); 
       } 

       lista=(ListView)findViewById(R.id.list); 

       adapter=new LazyAdapter(this, songsList); // ERROR APPEARS HERE 
       lista.setAdapter(adapter); 


      progressDialog.cancel(); 
     } 
    }.start(); 
} 

LazyAdapter.java

public class LazyAdapter extends BaseAdapter { 

private Activity activity; 
private ArrayList<HashMap<String, String>> data; 
private static LayoutInflater inflater=null; 
public ImageLoader imageLoader; 

public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 
    data=d; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
} 
+0

究竟是什麼錯誤? – 2012-04-25 01:20:11

+0

是一個錯誤或警告?你的意思是「錯誤警告」? – 2012-04-25 04:22:51

+0

錯誤是:構造函數LazyAdapter(new Runnable(){},ArrayList >)未定義 – user1265628 2012-04-25 13:12:43

回答

0

我已經嘗試你的代碼可以ou試試這個:

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

handler = new Handler(); 
progressDialog = ProgressDialog.show(MainActivity.this, "", "Loading..."); 
new Thread(){    
    public void run() { 

     ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); 

      XMLParser parser = new XMLParser(); 
      String xml = parser.getXmlFromUrl(URL); // getting XML from URL 
      Document doc = parser.getDomElement(xml); // getting DOM element 

      NodeList nl = doc.getElementsByTagName(KEY_SONG); 


      for (int i = 0; i < nl.getLength(); i++) { 
       // creating new HashMap 
       HashMap<String, String> map = new HashMap<String, String>(); 
       Element e = (Element) nl.item(i); 
       // adding each child node to HashMap key => value 
       map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
       map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE)); 
       map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST)); 
       map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION)); 
       map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL)); 

       // adding HashList to ArrayList 
       songsList.add(map); 
      } 

      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        lista=(ListView)findViewById(R.id.list); 

        adapter=new LazyAdapter(this, songsList); // ERROR APPEARS HERE 
        lista.setAdapter(adapter); 


        progressDialog.cancel(); 
       } 
      });    

     } 
    }.start(); 
} 
+0

是否正在工作.. – 2012-04-25 07:01:36

+0

更改後的錯誤是:java.lang.ClassCastException:br.com .farmacia.OfertasActivity $ 1 $ 1無法轉換爲android.app.Activity – user1265628 2012-04-25 13:15:39

+0

請在此行中的adapter = new LazyAdapter(this,songsList)中嘗試class_activity_name.this而不是「this」。 – 2012-04-25 13:35:46

0

UI界面

progressDialog = ProgressDialog.show(MainActivity.this, "", "Loading..."); in child thread 

所以有這個proplem