Пользовательский адаптер setOnItemClickListener parent.getItemAtPosition () всегда равен нулю

У меня есть настраиваемый адаптер, предоставляющий настраиваемые представления для списка (несколько полей и изображение). Я что-то изменил, и по какой-то причине мой метод родительского элемента clickListener.getItemAtPosition (position) всегда возвращает значение null. Не знаю, как внесенные мной изменения повлияли на этот эффект. При переходе через него он срабатывает правильно, но по какой-то причине значение всегда равно нулю. Вы что-нибудь видите?

ListView airportResults = (ListView) findViewById( R.id.listAirportResults );
List<SearchResultsItem> items = getSearchResults(searchTerm);
ResultsAdapter = new SearchResultsAdapter(this, items);
airportResults.setAdapter(ResultsAdapter);

Мой getSearchResults (searchTerm) возвращает элементы в списке со следующим типом:

List<SearchResultsItem>

Затем слушатель onclick:

airportResults.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long duration) {
            String sClickedItem = (String) parent.getItemAtPosition(position);

           //do something with sClickedItem
        }
    });

Из приведенного выше кода параметр position правильный (я нажимаю на первый элемент, position = 0; я нажимаю на 4-й элемент, position = 3 и т. Д.). Все родительские объекты и объекты просмотра имеют значения. Однако sClickedItem всегда имеет значение null.

Большое спасибо, J


person Jammo    schedule 11.11.2013    source источник
comment
Возможно, это связано с тем, как вы реализовали адаптер. Вы пробовали parent.getAdapter (). GetItem (position)   -  person ootinii    schedule 12.11.2013
comment
По-прежнему нулевой. В отладчике переменных я могу развернуть адаптер и просмотреть элементы в списке (родительский ›mAdapter› items ›...).   -  person Jammo    schedule 12.11.2013
comment
Вы расширили BaseAdapter? Если это так, вам, возможно, придется переопределить, чтобы создать свой собственный метод getItem (position). ArrayAdapter справится с этим за вас, но я не думаю, что BaseAdapter справится.   -  person ootinii    schedule 12.11.2013
comment
Нашел - это была моя кастомная реализация. Спасибо за вашу помощь. Ответ ниже   -  person Jammo    schedule 12.11.2013


Ответы (1)


Решено. Это была моя реализация кастомного адаптера.

    airportResults.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long duration) {
            TextView textViewIata = (TextView) view.findViewById(R.id.list_searchresults_iata);
            String clickedIataValue = (String) textViewIata.getText();

Поскольку я не использовал стандартные объекты, мне пришлось сделать свою реализацию. Проще говоря: мое представление было сокращенным XML-макетом с различными текстовыми представлениями в нем, поэтому мне просто нужно было view.findViewById () (потому что представление является текущим выбранным элементом в listview) и getText () вместо этого.

Спасибо, что заставили меня осознать это

J

person Jammo    schedule 12.11.2013