Как построить ListView на основе объекта JSON и передать его данные после onItemClick - PullRequest
0 голосов
/ 07 ноября 2018

Не уверен, что название точно описывает то, что я пытаюсь сделать, но здесь идет ...

Мое приложение получает с сервера следующий объект JSON:

[{"id":"0","code":"1234","name":"thing"}]

Я хочу создать ListView для всех этих элементов (количество элементов в JSON всегда варьируется) и отображать только значение поля "name" в моем ListView. Поэтому мой список должен выглядеть так для пользователя:

thing
another thing
third thing
...

Теперь я хочу получить значение "code" из объекта JSON для этого конкретного "name" при нажатии на ListView. Таким образом, с объектом выше, я получу "1234", когда нажмем "thing".

Позже я хочу отправить "code" другому занятию и выполнить несколько последующих запросов к базе данных, используя его, но сейчас я не могу заставить это работать.

Я знаю, что с тем, что у меня есть сейчас, "code" невидим для программы, потому что я строю свой ListView из строк "name" из объекта JSON

У меня есть следующий 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, но после нескольких часов возни с ним, я просто сдался ... По сути, я построил MatrixCursor таким же образом, как я строил свои акции [] и надеялся вернуть индекс выбранный элемент ListView, а затем просто использовать этот индекс на MatrixCursor, потому что я предполагаю, что они будут указывать на одно и то же? Я не уверен, что это правильный способ сделать это, хотя. И, в конце концов, я так и не смог этого понять.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Чтобы достичь того, о чем вы просите, я думаю, что было бы неплохо подумать об использовании 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

С этого момента все остальное будет довольно интуитивно понятно.

Если вам нужна дополнительная помощь, прокомментируйте.

0 голосов
/ 07 ноября 2018

Вы должны создать объект POJO, отражающий ваш объект JSON. Примерно так:

class MyObject {
  String id;
  String code;
  String name;
}

Затем используйте Gson для создания списка объектов из вашего JSON.

После этого вы сможете создать адаптер для класса MyObject вместо String. Было бы проще получить информацию о предмете, по которому вы щелкнули.

...