2011-06-16 28 views
1

我有一個ExpandableListView和ExpandableListAdapter力ExpandableListView更新數據。當我在我的適配器中撥打notifyDataSetChanged()時,數據不會刷新,直到我摺疊然後展開組。這裏是有問題的代碼。當notifyDataSetChanged被稱爲

首先,我的活動(相關部分)

public class HomeActivity extends ExpandableListActivity { 

適配器的建設和列表

homeList = (ExpandableListView)this.findViewById(android.R.id.list); 
homeAdapter = new ExpandableHomeAdapter(this, profile.Statements, getItems(itemCount)); 
homeList.setAdapter(homeAdapter); 
homeList.setIndicatorBounds(0,0); 
homeList.setOnChildClickListener(this); 

homeList.expandGroup(0); 
homeList.expandGroup(1); 

在該活動中,我有一個事件,活動註冊,讓它知道模型數據(存儲在應用程序控制器中)已經改變。這是事件。

private DataChangedListener dataChanged = new DataChangedListener() { 

    @Override 
    public void dataChanged(DataChangedEvent event, ChangeModel changes) { 
     profile = Controller.getProfile(); 

     for (int x = 0; x < changes.NewItems.length; x++) { 
      homeAdapter.insertItem(changes.NewItems[x], x); 
     } 

     for (int x = 0; x < changes.NewStatements.length; x++) { 
      homeAdapter.insertStatement(changes.NewStatements[x], x); 
     } 

    } 
}; 

再有就是我的適配器

public class ExpandableHomeAdapter extends BaseExpandableListAdapter { 

插入方法

public void insertItem(ItemSummary item, int index) { 
    items.add(index, item); 

    this.notifyDataSetChanged(); 
} 

使用notifyDataSetChanged()當我使用多個ArrayAdapter幫過同樣的方法。但是,現在一切正常,數據實際上已經改變,屏幕不會隨新數據一起更新,直到我(手動)摺疊並隨後展開組。我還沒有嘗試以編程方式摺疊/展開,但我想保存它作爲最後的手段。如何在數據更改時更新視圖?

回答

1

我想這是因爲在你充氣ExpandableListView的方式發生。試試這個:而不是做一個findViewById搶ELV的,調用包含ExpandableListView佈局的setContentView。然後調用:

ExpandableListView homeList = getExpandableListView(); 

此外,有沒有讓你從類的外部調用notifyDataSetChanged()法的方式進行。也許你可以從你稱之爲InsertItem方法的地方打電話給它。