如何基于 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

如何从 JSON 对象构建 JSON 字符串 [重复]

如何构建 JSON 对象以发送到 AJAX WebService?

如何将 JSON 字符串解析为 ListView?

如何在 c# 中使用 JSON 使用 foreach 序列化多个项目?