强制ExpandableListView在调用notifyDataSetChanged时更新数据

时间:2011-06-16 15:27:06

标签: android view expandablelistview expandablelistadapter

我有一个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的相同方法有效。但是,现在,虽然一切正常并且数据实际上已更改,但在我(手动)折叠然后展开组之前,屏幕不会使用新数据进行更新。我没有试过编程崩溃/扩展,但我想保留它作为最后的手段。如何在数据更改时让视图更新?

1 个答案:

答案 0 :(得分:1)

我认为这种情况正在发生,因为你正在夸大ExpandableListView。试试这个:不要使用findViewById来获取ELV,而是调用包含setContentView的布局的ExpandableListView。然后致电:

 ExpandableListView homeList = getExpandableListView();

另外,有没有办法从课外调用notifyDataSetChanged()方法。也许您可以从调用InsertItem方法的同一个地方调用它。