2012-03-15 393 views
1

在我的应用程序中,spinne显示活动项目(我使用支持库的加载程序加载它们)。微调器的初始化工作正常,它只显示活动项目。Android:Spinner不更新数据集更改后

,但我得到了followeing问题: 当我编辑在另一活动中的项目,并将它们存储(主动和deactivat其中的一些)的返回(后退按钮),然后我看到项目的“老字号”名单在微调。适配器使用正确的数据获取新的游标,但微调器不刷新他的列表。

如何才能刷新微调列表?

onCreate()我初始化微调

_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); 

回答

0

最后我发现了,不是为什么,而是哪个,元件破坏刷新了微调。

我所用的相同的ContentProvider的两个不同的URI用于更新所有项目,并只显示有效的项目

  1. CONTENT_URI_ITEMS
  2. CONTENT_URI_ACTIVE_ITEMS

如果使用相同的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);

3

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

+0

......不是卡恩,但schould;) – 2012-03-15 14:49:15

+0

好,我是回答“我能做什么” :-) – dldnh 2012-03-15 14:50:19

+1

我想这一点,但它并不能帮助。微调员显示_ **旧**数据。 – WebDucer 2012-03-15 14:52:07

0

你试过:

getLoaderManager().restartLoader(0, null, this); 
在您的活动

,只是一个数据库上进行更改后。