下面是一个带有 ListView 的代码片段。我添加了一个emptyView 和一个headerView。添加 headerView 会导致 onItemClick 中的位置增加一。
因此,如果没有 headerView,第一个列表元素的位置将为 0,而使用 headerView,第一个列表元素的位置将为 1!
这会导致我的适配器出现错误,例如在调用 getItem() 和使用其他一些方法时,请参见下文。奇怪的事情:在适配器的 getView() 方法中,第一个列表元素被请求位置为 0,即使添加了 headerView !
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ListView list = (ListView) viewSwitcher.findViewById(R.id.list);
View emptyView = viewSwitcher.findViewById(R.id.empty);
list.setEmptyView(emptyView);
View sectionHeading = inflater.inflate(R.layout.heading, list, false);
TextView sectionHeadingTextView = (TextView) sectionHeading.findViewById(R.id.headingText);
sectionHeadingTextView.setText(headerText);
list.addHeaderView(sectionHeading);
list.setAdapter(listAdapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
listAdapter.getItem(position);
//Do something with it
}
});
}
一些适配器方法:
@Override
public int getViewTypeCount() {
return TYPE_COUNT;
}
@Override
public int getItemViewType(int position) {
return (position < items.size()) ? ITEM_NORMAL : ITEM_ADVANCED;
}
@Override
public Product getItem(int position) {
return items.get(position);
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return (position < items.size());
}
这是添加 headerView 时的正常行为吗?以及如何克服适配器中的问题?