Android:更改数据集后Spinner不会更新

时间:2012-03-15 14:34:01

标签: android spinner adapter android-contentprovider loader

在我的应用程序中,spinne显示活动项目(我使用Loader of support library来加载它们)。微调器的init工作正常,它只显示活动项。

但是我遇到了以下问题: 当我编辑另一个活动中的项目并存储它们(激活并取消激活其中一些)时,返回(后退按钮),然后我在旋转器中看到“旧”项目列表。适配器使用正确的数据获取新游标,但微调器不刷新其列表。

如何更新微调器列表?

onCreate()中我初始化Spinner

_ItemSpinner = (Spinner) getView().findViewById(R.id.spn_itemss);
_ItemAdapter = new AdvancedCursorAdapter(
    getActivity(),
    R.layout.spinner_2line_item,
    null, _ColumnList, _ColumnViews, 0);
_ItemSpinner.setAdapter(_ItemAdapter);

onResume()中,我开始加载器初始化

@Override
public void onResume() {
    getLoaderManager().initLoader(1, null, this);
    super.onStart();
}

onLoadFinished(Loader<Cursor> loader, Cursor data)中,我将光标交换为适配器

_ItemAdapter.swapCursor(data);

3 个答案:

答案 0 :(得分:3)

您可以调用适配器的notifyDataSetChanged方法

答案 1 :(得分:0)

最后我发现了,不是为什么,而是哪个元素 销毁 刷新微调器。

我使用同一ContentProvider的两个不同的URI来更新所有项目并仅显示活动项目

  1. CONTENT_URI_ITEMS
  2. CONTENT_URI_ACTIVE_ITEMS
  3. 如果我使用相同的URI进行更新和显示(使用所需的活动过滤器),则会更新微调器列表。如果我使用不同的URI,则微调器会显示 数据。

    我不明白这种行为(光标返回正确数量的项目,但是微调器并不关心),但我有一个可行的方法。

    存储数据:

    getActivity().getContentResolver().update(
        RecordsContentProvider.CONTENT_URI_ITEMS,
        _Changes,
        COLUMN_ID + " =?",
        new String[] { String.valueOf(_ID) });
    

    之前(获取数据) - 不起作用

    CursorLoader curLoader = new CursorLoader(this.getActivity(),
        RecordsContentProvider.CONTENT_URI_ACTIVE_ITEMS,
        _ITEMS_PROJECTION,
        null, null, null);
    

    之后(获取数据) - 工作

    CursorLoader curLoader = new CursorLoader(this.getActivity(),
        RecordsContentProvider.CONTENT_URI_ITEMS,
        _ITEMS_PROJECTION,
        COLUMN_IS_ACTIVE + " =1", null, null);
    
    如果基础notifyDataSetChanged为您执行此操作,则不需要

    ContentProvider :( getContext().getContentResolver().notifyChange(uri, null);

答案 2 :(得分:0)

你试过了吗?

getLoaderManager().restartLoader(0, null, this);
在您的活动中,只需在对数据库进行更改后