使listview sharedPreference感知

时间:2014-12-04 05:37:23

标签: android listview android-listview sharedpreferences

我有一个由我的自定义类填充的列表视图。

我不确定最好的方法是如何建立sharedPreferences设置的首选项与Listview之间的关系。

理想情况下,我想在类中添加“showMe”类型成员,然后在listview的自定义适配器中,我可以在让适配器添加它之前检查该标志。 但问题是,一旦设置了首选项,我应该在哪里设置此标志?我知道我在SettingsActivity中有onSharedPreferenceChanged(),但是我如何引用List来从SettingsActivity中获取我的客户类标志?

这是最好也是最有效的方法吗?

我还考虑过在MainActivity的onResume中执行它 - 因为当你从SettingsActivity返回时调用它,并且至少在MainActivity中我可以访问List。但我只是不确定这个逻辑是否正确,因为我尝试了它,并且由于某种原因,列表对象无法访问onResume(app crashes)。

因此,我遵循了如何使我的列表视图了解偏好更改的最佳做法,以便根据是否应显示每个项目来刷新自己。

1 个答案:

答案 0 :(得分:0)

您是否尝试过localSroadcasting,在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);