Как получить данные из списка

У меня есть список, и я хочу получать данные из ArrayList, когда я нажимаю на элемент, но я не знаю, как это сделать:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
            //what do i do
        }
    });

Таким образом я получаю данные:

JSONObject object = new JSONObject(response);
JSONArray jsonArray = object.getJSONArray("search");
for (int i = 0; i < jsonArray.length(); i++){
final JSONObject object1 = jsonArray.getJSONObject(i);
    arrayList.add(new resultsearch(
         object1.getInt("id"),
         object1.getString("destination"),
         object1.getString("infor"),
         object1.getString("city"),
         object1.getInt("rating"),
         object1.getString("img"),
         BigDecimal.valueOf(object1.getDouble("point")).floatValue(),
         object1.getString("comments")
         ));
}
adapter.notifyDataSetChanged();
2
0
221
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я предполагаю, что у вас уже есть записи в вашем списке. Я думаю, что ваш список внутри адаптера будет arrayList. Таким образом, позиция внутри arraylist — это позиция элемента, на который вы нажали.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
        arraylist.get(position);
    }
});

Я не знаю, что у вас здесь за объект: Так что это будет что-то вроде: Object yourObject = arraylist.get(position);

Или, как упоминалось в комментариях Карима. Получите предмет через адаптер adapter#getItem(position)!

Это один из способов сделать это, но я предпочитаю не использовать arrayList, потому что иногда данные в адаптере не синхронизируются с arrayList. Я предпочитаю adapter#getItem(position).

Shababb Karim 20.05.2019 17:23

Вот так! Ваш способ лучше! Я отредактирую свой ответ.

Erythrozyt 21.05.2019 12:53
Ответ принят как подходящий

Вы можете использовать аргумент position для AdapterView.OnItemClickListener#onItemClick, чтобы получить доступ к вашим данным в любой конкретной позиции.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
        Object item = adapter.getItem(position);
    }
});

Добро пожаловать. Удачи!

Shababb Karim 21.05.2019 21:49

Что вы можете сделать, чтобы получить данные из ArrayList внутри метода OnitemClickListener, это:

bookList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String bookName = booksArrayList.get(position);
        }
    });

С помощью метода get вы получаете значение по индексу position в вашем списке массивов.

Я предполагаю, что у вас есть все геттеры в классе ResultSearch

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
        String information;
        ResultSearch resultSearch = arrayList.get(position);
        information = new StringBuilder()
        .append("id: " + resultSearch.getInt("id") + "\n")
        .append("destination: " + resultSearch.getString("destination") + "\n")
        .append("infor: " + resultSearch.getString("infor") + "\n")
        .append("city: " + resultSearch.getString("city") + "\n")
        .append("rating: " + resultSearch.getInt("rating") + "\n")
        .append("img: " + resultSearch.getString("img") + "\n")
        .append("point: " + resultSearch.getDouble("point") + "\n")
        .append("comments: " + resultSearch.getString("comments") + "\n")
        .toString();
        //display this using an AlertDialog or open an activity containing this information
    }
});

Другие вопросы по теме