OnItemClickListener показывает текст исключительно с последнего элемента списка

252
27 апреля 2017, 14:08

Есть кастомный элемент списка в котором textview. Выводит,исключительно,текст из ПОСЛЕДНЕГО элемента списка, вне зависимости он кликнутой позиции.

@Override
        public void onResponse(JSONObject response) {
            hideDialog();
            //parsing json
            try{
                JSONArray obj = response.getJSONArray("image_info_table");
                for(int i=0;i<obj.length();i++){
                    final JSONObject info = obj.getJSONObject(i);
                    final Item item=new Item();
                    item.setTitle(info.getString("name"));
                    item.setImage(info.getString("path"));
                    array.add(item);
                    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
                            System.out.println("itemClick: position = " + position + ", id = "
                                    + id);
                            System.out.println( item.getTitle());\\ проблемка вот тут, выводит текст, только из нижнего, последнего элемента списка.
                        }
                    });
                }

Подскажите,плз, как реализовать корректную работу по выводу текста с каждого элемента списка, а не только из последнего.

Answer 1

Вы загоняете последний 'Item ' в массив, а потом при клике на любой элемент списка выводите текст из этого последнего 'Item'.

В Вашем случае в 'Listener'-e должен был быть код примерно такой:

System.out.println(array.get(position).getTitle());

Установку 'Listener'-а кстати вынесите из цикла, а то постоянно его перезаписываете.

Answer 2

Вы каждый раз перезаписываете onItemClickListener, в конечном итоге остаётся только последний.

Вот одно из решений:

@Override
public void onResponse(JSONObject response) {
    hideDialog();
    //parsing json
    try{
        JSONArray obj = response.getJSONArray("image_info_table");
        if (obj != null) { 
            for (int i=0;i<obj.length();i++){ 
                 final Item item = new Item();
                 item.setTitle(info.getString("name"));
                 item.setImage(info.getString("path"));
                 array.add(item);
            } 
        } 
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
                   System.out.println("itemClick: position = " + position + ", id = " + id);
                   System.out.println(array.get(position).getTitle());
             }
         });
 }
READ ALSO
Потоки и семафоры в Java

Потоки и семафоры в Java

Такой вопрос, если у меня есть задание: В потоке А формируется общий ресурс (формирует файл), а в потоке В обработать его (отсортировать числа...

216
Конфликт dependency

Конфликт dependency

Нужно из контроллера SpringMVC вернуть pojo объект и перехватить его на странице jsp функцией $ajax()

216
Не меняется значение на выходе из функции

Не меняется значение на выходе из функции

Описано два класса в одном пекеджеВ первом описание объекта и методы, в другом эти методы должны выполняться

208
Android Studio ошибка запуска приложения на своем девайсе (Xiaomi)

Android Studio ошибка запуска приложения на своем девайсе (Xiaomi)

Пытаюсь запустить приложение на своем девайсе но постоянно выскакивает эта ошибка

399