HashMap 传递给 Activity

HashMap passed to Activity

我正在尝试使用 getter tableRow.getRowData()HashMap 对象传递给另一个 activity,如下面的代码所示:

tableRow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent newIntent = new Intent(getApplicationContext(), ToDoDetailActivity.class);
                putExtras(newIntent, tableRow.getRowData());//<---
                startActivity(newIntent);
            }
        });

实际上 tableRow 对象属于一个自定义 class,它继承自 TableRow,它位于代表整行的 HashMap<String, String> rowData 中(键:'DB column',值:'DB field value').正如我所说,rowDatagetRowData() 返回。

这是在 putExtras() 内传输对象的好方法吗?

此外,看到this Android tutorial,我不知道如何处理rowData到另一个activity。

编辑: 我的问题与 this 有点不同,因为它不可能通过,即使 HashMap class 默认情况下被序列化,通过 putExtra() 散列映射对象(我尝试通过以前看过那个问题)。

是的,这是标准方式,但您只能将 Serializable 对象作为附加项传递。 HashMapString 实现了 Serializable,所以它应该可以工作。

看看 TableRow 继承 class 可能会有用,但我会尝试猜测一些要发送的代码:

Intent newIntent = new Intent(getApplicationContext(), ToDoDetailActivity.class);
intent.putExtra("tableRow", tableRow.getRowData());//<---
startActivity(newIntent);

并从接收中获取 TableRow 数据 Activity:

protected void onCreate(Bundle bundle) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    TableRow tableRow = (TableRow)intent.getSerializableExtra("tableRow");
}

AFAIK,无法通过 Activity 传递 HashMap。如果你真的需要传递所有 HashMap 数据,我建议使用 Application 来存储你的 HashMap 然后你可以从应用程序的任何地方访问你的 HashMap 数据。

您不需要使用 getRowData。您所要做的就是:

HashMap<Object, Object> extraData = new HashMap<>();
putExtras("myHashMap", extraData);

在你的第二个 activity:

(HashMap<Object, Object>) intent.getSerializableExtra(YourFirstActivity.EXTRA_DATA);

我发现,正如 Kingfisher Phuoc 所说,无法通过活动传递 HashMap,除非为 HashMap 的每个元素调用 putExtra()。我认为这是有史以来最简单的解决方案。