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').正如我所说,rowData
由 getRowData()
返回。
这是在 putExtras()
内传输对象的好方法吗?
此外,看到this Android tutorial,我不知道如何处理rowData
到另一个activity。
编辑:
我的问题与 this 有点不同,因为它不可能通过,即使 HashMap class 默认情况下被序列化,通过 putExtra()
散列映射对象(我尝试通过以前看过那个问题)。
是的,这是标准方式,但您只能将 Serializable 对象作为附加项传递。 HashMap
和 String
实现了 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()
。我认为这是有史以来最简单的解决方案。
我正在尝试使用 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').正如我所说,rowData
由 getRowData()
返回。
这是在 putExtras()
内传输对象的好方法吗?
此外,看到this Android tutorial,我不知道如何处理rowData
到另一个activity。
编辑:
我的问题与 this 有点不同,因为它不可能通过,即使 HashMap class 默认情况下被序列化,通过 putExtra()
散列映射对象(我尝试通过以前看过那个问题)。
是的,这是标准方式,但您只能将 Serializable 对象作为附加项传递。 HashMap
和 String
实现了 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()
。我认为这是有史以来最简单的解决方案。