我有一个ExpandableListView和一个ExpandableListAdapter。当我在适配器中调用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
的相同方法有效。但是,现在,虽然一切正常并且数据实际上已更改,但在我(手动)折叠然后展开组之前,屏幕不会使用新数据进行更新。我没有试过编程崩溃/扩展,但我想保留它作为最后的手段。如何在数据更改时让视图更新?
答案 0 :(得分:1)
我认为这种情况正在发生,因为你正在夸大ExpandableListView
。试试这个:不要使用findViewById
来获取ELV,而是调用包含setContentView
的布局的ExpandableListView
。然后致电:
ExpandableListView homeList = getExpandableListView();
另外,有没有办法从课外调用notifyDataSetChanged()
方法。也许您可以从调用InsertItem
方法的同一个地方调用它。