【问题标题】:What is the best way to pass a set to another activity. Java Android SDK将集合传递给另一个活动的最佳方式是什么。 Java Android SDK
【发布时间】:2015-10-02 11:02:01
【问题描述】:

我有一个包含字符串列表的集合:

public  Set<String> favs = new HashSet<>();

但是,当我开始另一个活动“收藏夹”时,我想将此列表传递给我的“收藏夹”课程,目前我有:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();


    if (id == R.id.action_settings) {
        return true;
    } else if (id == R.id.exit_the_app) {
        finish();
        return true;
    } else if (id == R.id.favorites) {
        Intent startfavs = (new Intent(Insulter.this, Favorites.class));
        startActivity(startfavs);
        return true;
        }
return super.onOptionsItemSelected(item);
}

我想在“收藏夹”中传递这个集合,并在将其更改为列表后最终将其显示在列表视图中。这样做的最佳方法是什么?

(注意:我的第二个活动都设置在歧管中并且运行良好)

【问题讨论】:

标签: java android list sdk set


【解决方案1】:

在你的第一个名为 Insulter 的活动中,添加这个,

Intent startfavs = (new Intent(Insulter.this, Favorites.class));
String[] objects = new String[set.size()];
set.toArray(objects);
final ArrayList<String> list = new ArrayList<String>(Arrays.asList(objects));
startfavs.putStringArrayListExtra("favs",list);
startActivity(startfavs);

在您的第二个名为“收藏夹”的活动中,获取参数,

ArrayList<String> favs = getIntent().getStringArrayListExtra("favs");

【讨论】:

  • 所以我传递了一个字符串数组列表,对吧?但是,当我在第二个活动中添加第二段代码时,getIntent 变红并且无法解析符号“getIntent”。有什么想法吗?
  • 对不起,不是getIntent,是getIntent()
【解决方案2】:

在使用它们开始另一个活动之前,可以将额外的数据放入意图中。 Intent 类提供了 putExtra() 方法来放入额外的数据。

putExtra() 方法有几个重载,因为您专门询问传递 Set,这可能是最相关的:

public Intent putExtra (String name, Serializable value)

更多详情请查看:putExtra(String name, Serializable value)

由于您使用的是 HashSet,因此传递 favs 对象应该可以正常工作,因为 HashSet 实现了可序列化。

所以你的代码看起来像这样:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();


    if (id == R.id.action_settings) {
        return true;
    } else if (id == R.id.exit_the_app) {
        finish();
        return true;
    } else if (id == R.id.favorites) {
        Intent startfavs = (new Intent(Insulter.this, Favorites.class));
        startfavs.putExtra("favs_set", favs);
        startActivity(startfavs);
        return true;
        }
return super.onOptionsItemSelected(item);
}

不要忘记您还必须检索此数据,因此在您的 Favorites 活动中,在 onCreate() 方法中,您可以使用检索此数据

public Serializable getSerializableExtra (String name)

相关的代码如下所示:

getExtras().getSerializableExtra("favs_set");

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多