首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使listview sharedPreference意识到

使listview sharedPreference意识到
EN

Stack Overflow用户
提问于 2014-12-04 05:37:23
回答 1查看 72关注 0票数 0

我有一个由我的自定义类填充的listview。

我不确定最好的方法是如何使sharedPreferences设置的首选项与清单视图之间的关系。

理想情况下,我考虑向类中添加一个"showMe“类型成员,然后在列表视图的自定义适配器中,在让适配器添加它之前,我可以简单地检查该标志。但是问题是,一旦设置了首选项,我应该在哪里设置这个标志?我知道我的onSharedPreferenceChanged()在SettingsActivity中,但是如何引用从SettingsActivity中获取客户类标志的列表呢?

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

我还考虑过在onResume of MainActivity中这样做--因为它是在您从SettingsActivity返回时调用的,而且至少在MainActivity中,我可以访问列表。但我不确定这个逻辑是否正确,因为我尝试过了,而且出于某种原因,列表对象是不可访问的onResume (应用程序崩溃)。

因此,我所追求的最佳实践是如何让我的列表视图意识到偏好的变化,以便根据是否应该显示每一项来刷新它自己。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-04 06:13:10

您在onSharedPreferenceChanged()中尝试过本地广播吗?

在活动中添加一个接收器,以便当首选项更改时,通过一个意图传递该数据,并在广播接收器中接收该数据并刷新列表。

在你的活动中:

代码语言:javascript
复制
   private BroadcastReceiver statusReceiver = new BroadcastReceiver()
   {
     public void onReceive(Context context,Intent intent)
        {
          //get data from intent
         //use intent.getExtras().get(name);
        };
   };

将活动的意图在onResume()中注册为:

代码语言:javascript
复制
LocalBroadcastManager.getInstance(this)
                         .registerReceiver(statusReceiver,
                                           new IntentFilter("updateList"));

并且onPause()移除侦听器,因此确保当活动处于后台时,侦听器将被取消注册。

代码语言:javascript
复制
   LocalBroadcastManager.getInstance(this)
                         .unregisterReceiver(statusReceiver);

并来自onSharedPreferenceChanged();

代码语言:javascript
复制
 Intent intent = new Intent("updateList");
 intent.putExtra(name, value)
 LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27287044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档