0

我有一个活动,用户可以在其中将他/她的设备上已安装的应用程序标记为 Arcade、Education 或两者都不是。在另一个活动中,我只想隔离 Arcade 选定的应用程序。

这就是我所拥有的:

    ArrayList<String> arcadeApps = null;

    SharedPreferences stored = getSharedPreferences("Sorted Apps", 0);

    Map<String, ?> mappedPreferences = stored.getAll();
    Iterator iterator = mappedPreferences.entrySet().iterator();

    while(iterator.hasNext()){
        Map.Entry nextEntry = (Map.Entry) iterator.next();
        if(nextEntry.getValue().equals("Arcade")){
            arcadeApps.add((String) nextEntry.getKey());
        }
    }

这是在做我想做的事吗,特别是,arcadeApps 是用户有资格成为“Arcade”的所有应用程序的列表吗?如果这是一个愚蠢的问题,我很抱歉,我只是不知道如何快速检查这个

4

1 回答 1

0

您是否将 ArrayList 存储在首选项中?从理论上讲,您不能存储与 Boolean、Float、Int、Long、String 和 Set 不同的首选项元素。实际上有一种方法可以将 ArrayLists 存储在首选项中,但这不是在活动之间传递数据的最佳方式!

您应该通过意图传递数据。

假设您有一张地图,其中存储了有关每个应用程序的信息。

HashMap<String, String> applicationsMap = new HashMap<String, String>();
applicationsMap.put("MyApp1", "Arcade");
applicationsMap.put("MyApp2", "Educational");

现在将此地图传递给第二个活动

Intent activityIntent = new Intent(FirstActivity.this, SecondActivity.class);
activityIntent.putExtra("applicationsMap", applicationsMap);
// you can do it because HashMap<String, String> implements Serializable

现在,在第二个活动(onCreate() 方法)中,恢复地图

Intent activityIntent = getIntent();
HashMap<String,String> applicationsMap = (HashMap<String,String>)activityIntent.getExtras().getSerializable("applicationsMap");

然后您可以在第二个活动中读取地图并仅提取那些具有“Arcade”作为值的应用程序。

于 2013-06-25T16:52:07.583 回答