我有一个由我的自定义类填充的listview。
我不确定最好的方法是如何使sharedPreferences设置的首选项与清单视图之间的关系。
理想情况下,我考虑向类中添加一个"showMe“类型成员,然后在列表视图的自定义适配器中,在让适配器添加它之前,我可以简单地检查该标志。但是问题是,一旦设置了首选项,我应该在哪里设置这个标志?我知道我的onSharedPreferenceChanged()在SettingsActivity中,但是如何引用从SettingsActivity中获取客户类标志的列表呢?
这是最好和最有效的方法吗?
我还考虑过在onResume of MainActivity中这样做--因为它是在您从SettingsActivity返回时调用的,而且至少在MainActivity中,我可以访问列表。但我不确定这个逻辑是否正确,因为我尝试过了,而且出于某种原因,列表对象是不可访问的onResume (应用程序崩溃)。
因此,我所追求的最佳实践是如何让我的列表视图意识到偏好的变化,以便根据是否应该显示每一项来刷新它自己。
发布于 2014-12-04 06:13:10
您在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);https://stackoverflow.com/questions/27287044
复制相似问题