自定义适配器setOnItemClickListener parent.getItemAtPosition()始终为null

时间:2013-11-11 21:34:13

标签: android listview adapter

我有一个自定义适配器,为列表视图提供自定义视图(一些字段和一个图像)。我改变了一些东西,由于某种原因,我的clickListener方法parent.getItemAtPosition(position)总是返回null。不确定我所做的改变是如何产生这种效果的。单步执行时,它会正确触发,但由于某种原因,该值始终为null。你能看到什么吗?

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

我的getSearchResults(searchTerm)返回listview中具有以下类型的项目:

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
        }
    });

从上面的代码中,位置参数是正确的(我点击第一项,位置= 0;我点击第4项,位置= 3等)。父对象和视图对象都具有值。但是, sClickedItem 始终为空。

非常感谢, Ĵ

1 个答案:

答案 0 :(得分: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();

因为我没有使用标准对象,所以我必须自己实现。简单地说:我的观点是一个包含各种文本视图的cutom XML布局,所以我只需要 view.findViewById()(因为视图是当前选中的项目listview)和 getText()代替。

感谢您让我意识到这一点

Ĵ