2

我有一个 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(){
    }
}
4

1 回答 1

5

您必须调用getLoaderManager().restartLoader(int, Bundle, LoaderCallbacks)onCreateLoader()您可以根据Loader提供的Bundle.

请参阅http://developer.android.com/reference/android/app/LoaderManager.html上的示例,过滤器更改时如何使用它。要检测首选项更改,您可以使用SharedPreferences.OnSharedPreferenceChangeListener

于 2012-08-14T20:28:43.367 回答