2012-08-16 68 views
0

所以,我的活動實現了Runnable,並且在run()方法中我做了一些網頁抓取和等等等等等等等等等等等等等等等等等。但是這並不意味着我的問題。我希望它運行一些刮擦,然後用我得到的結果更新ListView。內部的運行方法,我有這樣的:Android ArrayAdapter <String>沒有更新

myAL.notifyDataSetChanged(); 

但它似乎並沒有被更新我的ListView ...這是我的onCreate:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    loadingSiteDialog = new ProgressDialog(this); 
    loadingSiteDialog.setCancelable(false); 
    loadingSiteDialog.setMessage("Retrieving Data, Please Wait..."); 

    loadingSiteDialog.show(); 

    list = (ListView)findViewById(R.id.list); 
    myAL = new AdapterList(this,R.layout.mainlistlayout); 
    list.setAdapter(myAL); 
    list.setOnItemClickListener(new OnItemClickListener(){ 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int pos, long id) { 

     } 
    }); 
    loading = true; 
    this.run(); 

} 

Withing我使用的ArrayList我的一個ArrayAdapter類,我在我的run()方法中傳播。 我的自定義ArrayAdapter類:

public class AdapterList extends ArrayAdapter<String>{ 

    public AdapterList(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 
    @Override 
    public View getView(int pos, View convertView, ViewGroup parent){ 
     View v = convertView; 
     if(v == null){ 
      LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.mainlistlayout, null); 
     } 
     TextView roomTV = (TextView)findViewById(R.id.roomTV); 
     roomTV.setText(rooms.get(pos)); 
     TextView wTV = (TextView)findViewById(R.id.washersTV); 
     wTV.setText(washersAvailable.get(pos) + "/" + washersTotal.get(pos)); 
     TextView dTV = (TextView)findViewById(R.id.dryersTV); 
     dTV.setText(dryersAvailable.get(pos) + "/" + dryersTotal.get(pos)); 
     Log.i("CSUMB Laundy","Attempting to getView: " + convertView.toString()); 
     return v; 
    } 

} 

我只是忘記了什麼嗎?它已經有一段時間了,因爲我不得不使用自定義列表視圖。

+0

如何添加數據? – 2012-08-16 07:28:45

+0

在getView中它使用了一個公共變量。也許我不完全明白notifyDataSetChanged的作用。 – Brandon 2012-08-16 07:40:38

回答

2

而不是

TextView wTV = (TextView)findViewById(R.id.washersTV); 

嘗試

TextView wTV = (TextView) v.findViewById(R.id.washersTV); 

編輯:

我猜你的列表視圖沒有更新,因爲你永遠不將數據添加到您的適配器。 從更改適配器類的構建方法,

public AdapterList(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
    } 

像:

private ArrayList<ListItem> listItems; 

     public AdapterList(Context context, int textViewResourceId, 
       ArrayList<YourListItemClass> objects) { 
      super(context, textViewResourceId, objects); 
      listItems = objects; 
      // TODO Auto-generated constructor stub 
     } 

且僅

listItems.get(position); 

讓您的數據,其內容設置爲你的意見。

當然,你應該定義一個像ListItem這樣的類和這個類的一個ArrayList來從這個數組列表構造你的適配器。 將數據存儲在此數組列表中時,將其添加到適配器中。

myAL.add(yourArrayList); 

它會更新您的列表視圖。

+0

我非常肯定,應該修正它(因爲它響起了鐘聲,就像我過去那樣),但可悲的是它沒有。 ListView中仍然沒有任何內容。我確信我的變量不爲空或爲空 – Brandon 2012-08-16 08:02:00

+0

我編輯了我的答案。 – 2012-08-16 08:22:48

+0

非常感謝。過去我不得不做一些調整,但是多虧了你,我才能解決問題。爲我節省了大量的搜索時間。 – Brandon 2012-08-16 08:53:57