我有一个由我的自定义类填充的列表视图。
我不确定最好的方法是如何建立sharedPreferences设置的首选项与Listview之间的关系。
理想情况下,我想在类中添加“showMe”类型成员,然后在listview的自定义适配器中,我可以在让适配器添加它之前检查该标志。 但问题是,一旦设置了首选项,我应该在哪里设置此标志?我知道我在SettingsActivity中有onSharedPreferenceChanged(),但是我如何引用List来从SettingsActivity中获取我的客户类标志?
这是最好也是最有效的方法吗?
我还考虑过在MainActivity的onResume中执行它 - 因为当你从SettingsActivity返回时调用它,并且至少在MainActivity中我可以访问List。但我只是不确定这个逻辑是否正确,因为我尝试了它,并且由于某种原因,列表对象无法访问onResume(app crashes)。
因此,我遵循了如何使我的列表视图了解偏好更改的最佳做法,以便根据是否应显示每个项目来刷新自己。
答案 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);