使用LoaderManager刷新ListFragment

时间:2012-08-14 20:12:43

标签: android android-listview

我有一个ListFragment类作为我的活动的子类,在我的PreferenceActivity我有一个设置来更改我有5个可能的列表视图中的2个的排序但当我返回到活动时列表视图onCreateLoader没有被再次调用,因此列表保持不变。

如何在更改设置值后更新列表?

我的onCreateLoader

的示例
if(pref.getString(Preferences.CAL_SORT, "1").equals("1")){
                return new CursorLoader(getActivity(),CalendarEvents.EVENTS_URI,
                        new String[] {CalendarEvents.EVENT_ID,CalendarEvents.EVENT_READ,CalendarEvents.EVENT_SUBJECT,
                            CalendarEvents.EVENT_COMPANY_NAME,CalendarEvents.EVENT_START}
                        ,null,null,CalendarEvents.EVENT_COMPANY_NAME+" COLLATE LOCALIZED ASC," /*+ julianday("*/+CalendarEvents.EVENT_START/* + ")"*/ + " COLLATE LOCALIZED DESC");
            }else{
                return new CursorLoader(getActivity(),CalendarEvents.EVENTS_URI,
                        new String[] {CalendarEvents.EVENT_ID,CalendarEvents.EVENT_READ,CalendarEvents.EVENT_SUBJECT,
                            CalendarEvents.EVENT_COMPANY_NAME,CalendarEvents.EVENT_START}
                        ,null,null,CalendarEvents.EVENT_COMPANY_NAME+" COLLATE LOCALIZED ASC," /*+ julianday("*/+CalendarEvents.EVENT_START/* + ")"*/ + " COLLATE LOCALIZED ASC");
            }

我知道我可以在适配器上调用notifyDatasetChange(),但外部活动看不到适配器。我应该在ContentProvider

中做些什么

这就是我班级的结构

public class MainActivity extends FragmentActivity {

    public static class ListViews extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>{
        public Loader<Cursor> onCreateLoader(int arg0,Bundle arg1){
        }
    }

    public void onResume(){
    }
}

1 个答案:

答案 0 :(得分:5)

您必须致电getLoaderManager().restartLoader(int, Bundle, LoaderCallbacks)。在onCreateLoader()中,您可以根据提供的Loader创建新的Bundle

请参阅http://developer.android.com/reference/android/app/LoaderManager.html处的示例,了解过滤器更改时的使用方法。要检测偏好更改,您可以使用SharedPreferences.OnSharedPreferenceChangeListener