2014-12-04 3 views
0

У меня есть список, заполненный моими пользовательскими классами.Выполнение listview sharedPreference aware

Что я не уверен в наилучшем способе сделать, заключается в том, как установить отношения между настройками, заданными sharedPreferences, и Listview.

В идеале я думал о добавлении члена типа «showMe» в класс, а затем в пользовательский адаптер для списка, я мог бы просто проверить этот флаг, прежде чем я позволю адаптеру его добавить. Но проблема в том, где я должен установить этот флаг после установки настроек? Я знаю, что у меня есть onSharedPreferenceChanged() в SettingsActivity, но как я могу ссылаться на List, чтобы получить флаг моего класса клиента из параметра SettingsActivity?

Это даже самый лучший и эффективный способ сделать это?

Я также думал о том, чтобы сделать это в onResume из MainActivity - поскольку он вызывается, когда вы возвращаетесь из SettingsActivity, и по крайней мере в MainActivity у меня есть доступ к списку. Но я просто не уверен, что эта логика правильная, потому что я ее попробовал, и по какой-то причине объект списка недоступен onResume (сбой приложений).

Так что я лучше всего разбираюсь в том, как сделать свой список извещением о предпочтениях, чтобы он обновлялся, основываясь на том, должен ли отображаться каждый элемент или нет.

+0

Эй, макапака, это разрешает вашу проблему? Если да, вы также можете подтвердить ответ. :) – Naveen

ответ

0

Вы пробовали локальное вещание, внутри onSharedPreferenceChanged()?

Добавить приемник в действие, чтобы при изменении настроек передавать эти данные с помощью намерения и получать их в широковещательном приемнике и обновлять список.

В вашей деятельности:

private BroadcastReceiver statusReceiver = new BroadcastReceiver() 
    { 
    public void onReceive(Context context,Intent intent) 
     { 
      //get data from intent 
     //use intent.getExtras().get(name); 
     }; 
    }; 

Регистрация намерение в onResume() деятельности, как:

LocalBroadcastManager.getInstance(this) 
         .registerReceiver(statusReceiver, 
              new IntentFilter("updateList")); 

И OnPause() удалить слушателя, так что вы убедитесь, что, когда активность в фоновом режиме слушатель не зарегистрирован.

LocalBroadcastManager.getInstance(this) 
         .unregisterReceiver(statusReceiver); 

И от onSharedPreferenceChanged();

Intent intent = new Intent("updateList"); 
intent.putExtra(name, value) 
LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
Смежные вопросы