如何基于 JSON 对象构建 ListView 并在 onItemClick 之后传递其数据
Posted
技术标签:
【中文标题】如何基于 JSON 对象构建 ListView 并在 onItemClick 之后传递其数据【英文标题】:How to build a ListView based on JSON object and pass its data around after onItemClick 【发布时间】:2019-04-11 02:04:39 【问题描述】:不确定标题是否准确地描述了我正在尝试做的事情,但这里是......
我的应用从服务器接收到以下 JSON 对象:
["id":"0","code":"1234","name":"thing"]
我想为所有这些项目创建一个 ListView(JSON 中的项目数量总是变化的),并且只在我的 ListView 中显示 "name"
字段的值。所以我的列表对于用户来说应该是这样的:
thing
another thing
third thing
...
现在,当在 ListView 上单击该特定 "name"
时,我想从 JSON 对象中检索 "code"
的值。所以对于上面的对象,当点击"thing"
时,它会给我"1234"
。
稍后我希望将"code"
发送到另一个活动并使用它对数据库进行一些后续查询,但现在我似乎无法让这些工作。
我知道,就我现在所拥有的而言,"code"
对程序不可见,因为我从 JSON 对象的 "name"
字符串构建了我的 ListView
我有以下 OnClickListener
search_results.setOnItemClickListener(new AdapterView.OnItemClickListener()
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
// ListView item is clicked!
);
我的 ListView 是这样构建的:
JSONArray jsonArray = new JSONArray(json);
String[] stocks = new String[jsonArray.length()];
for (int i = 0; i < jsonArray.length(); i++)
JSONObject obj = jsonArray.getJSONObject(i);
stocks[i] = obj.getString( "name" );
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, stocks);
search_results.setAdapter(arrayAdapter);
注意:我曾尝试使用 MatrixCursor,但经过数小时的摆弄,我放弃了...单击的 ListView 项目,然后只在 MatrixCursor 上使用该索引,因为我认为它们将指向同一事物?我不确定这是不是正确的方法。到头来还是想不通。
【问题讨论】:
【参考方案1】:您必须创建一个对象 POJO,以反映您的 JSON 对象。像这样:
class MyObject
String id;
String code;
String name;
然后,使用 Gson 从 JSON 创建对象列表。
之后,您将能够创建一个适配器来处理MyObject
类而不是字符串。检索您单击的项目的信息会更容易。
【讨论】:
【参考方案2】:为了实现您的要求,我认为您最好考虑使用RecyclerView
而不是ListView
。
1.创建一个简单的 POJO 类
并将您的 JSON 解析为,然后将 POJO 存储在 ArrayList
中。
class MyPojo
private String id;
private String code;
private String name;
//Dont forget to add your getters and setters...
2。将您的 ListView 切换为 RecyclerView
我建议你看看这个使用Recycler View
的教程。
Recycler View Tutorial
从那里开始,其他一切都将非常直观。
如果您需要更多帮助评论。
【讨论】:
以上是关于如何基于 JSON 对象构建 ListView 并在 onItemClick 之后传递其数据的主要内容,如果未能解决你的问题,请参考以下文章
当 Json root 不是数组而是对象时如何解析 JSON 数据,反之亦然,基于不同的 url?
如何使用 JSON 响应,它为我提供了一个带有对象的数组来设置我的 ListView