Android ListView не обновляется после notifyDataSetChanged с данными как карта

Я использовал список адаптер со значениями карты в качестве данных. Когда я используюadapter.notifyDataSetChanged(); данные в списке не обновляются. Но если я заменю карту на ArrayList, все будет работать нормально. Ниже приведен код моего адаптера.

public class CategoryAdapter extends BaseAdapter {
ArrayList<Category> list = new ArrayList<Category>();
Context context;

public CategoryAdapter(Context context, Map<String, Category> categories) {
    this.context = context;
    list.clear();
    list.addAll(categories.values());
}

@Override
    public int getCount() {
        return list.size();
    }

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHandler handler;

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.category_list_item, null);
            handler = new ViewHandler();
            handler.name = (TextView) convertView.findViewById(R.id.name);
            handler.count = (TextView) convertView.findViewById(R.id.count);
            convertView.setTag(handler);
        } else {
            handler = (ViewHandler) convertView.getTag();
        }
        Category category = list.get(position);
        handler.name.setText(category.getMenuName());
        handler.count.setText(category.getCount() + "");
        if (category.getCount() <= 0) {
            handler.count.setVisibility(View.INVISIBLE);
        } else {
            handler.count.setVisibility(View.VISIBLE);
        }

        return convertView;
    }
}

и мой код активности

private void loadCategories() {
    sampleDB = openOrCreateDatabase(AppConstants.DB_NAME, MODE_PRIVATE,
            null);
    Cursor menuCursor = sampleDB.rawQuery("select * from menu", null);

    categories.clear();
    while (menuCursor.moveToNext()) {
        String menu = menuCursor.getString(menuCursor
                .getColumnIndex("name"));
        String id = menuCursor.getString(menuCursor.getColumnIndex("id"));
        Category category = new Category(menu, id);
        categories.put(id, category);
    }
    menuCursor.close();
    categoryAdapter.notifyDataSetChanged();
}

вoncreate() Метод, который я объявил адаптер следующим образом

categoryAdapter = new CategoryAdapter(context, categories);
        categoryList.setAdapter(categoryAdapter);
        loadCategories();

Каждый раз, когда я нажимаю на кнопку обновления, он вызываетloadCategories(); метод. В том же коде, если я заменю Map на ArrayList, все работает нормально.

Теперь у меня вопрос, почему List не обновляется значениями Map. Пожалуйста, дайте мне разъяснения по этому поводу.

Заранее спасибо.

Ответы на вопрос(2)

Ваш ответ на вопрос