2012-03-15 389 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); 
在您的活動

,只是一個數據庫上進行更改後。