本文是基于作者遇到的一个bug而来,如果正常情况下,可以不考虑本文做法。
从官方的注释上看getSelectedView()
好像是得到当前选中的 item 的view
,getSelectedItem()
得到的当前选中的 item 所绑定的数据。这两个得到的数据类型都不相同怎么比较?
首先,看到getSelectedItem()
的源码 实现:
/**
* @return The data corresponding to the currently selected item, or
* null if there is nothing selected.
*/
public Object getSelectedItem() {
T adapter = getAdapter();
int selection = getSelectedItemPosition();
if (adapter != null && adapter.getCount() > 0 && selection >= 0) {
return adapter.getItem(selection);
} else {
return null;
}
}
可以看到 return 的是adapter.getItem(selection)
,也就是我们要重写的 Adapter 里面的getItem()
函数。如果重写的时候我们返回的不是data
数据,而是当前选中的itemView
(自定义的view)的话,就可以与getSelectedView()
相比较了(在重写getView()
里面,已经把自定义的itemView
设置为了convertView
的