Принудительно ExpandableListView для обновления данных при вызове notifyDataSetChanged - PullRequest
1 голос
/ 16 июня 2011

У меня есть 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 Ответ

1 голос
/ 16 июня 2011

Я думаю, что это происходит из-за того, как вы накачиваете ExpandableListView. Попробуйте это: вместо findViewById для захвата ELV, вызовите setContentView макета, который содержит ExpandableListView. Затем позвоните:

 ExpandableListView homeList = getExpandableListView();

Также есть способ вызвать метод notifyDataSetChanged() из-за пределов класса. Может быть, вы могли бы вызвать его из того же места, где вы вызываете метод InsertItem.

...