android - ListView addHeaderView 导致位置加一?

下面是一个带有 ListView 的代码 fragment 。我添加了一个emptyView 和一个headerView。添加 headerView 会导致 onItemClick 中的位置增加一。

因此,如果没有 headerView,第一个列表元素的位置将为 0,而使用 headerView,第一个列表元素的位置将为 1!

这会导致我的适配器出现错误,例如调用 getItem() 并使用其他一些方法时,请参见下文。 奇怪的事情:在适配器的 getView() 方法中,即使添加了 headerView,也请求第一个列表元素的位置为 0!

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 时的正常行为吗?以及如何克服适配器中的问题?

最佳答案

我刚遇到这个问题,最好的方法似乎是使用 ListView.getItemAtPosition(position) 而不是 ListAdapter.getItem(position) 作为 ListView 版本占标题,即:-

改为这样做:

myListView.getItemAtPosition(position)

https://stackoverflow.com/questions/11106397/

相关文章:

android - 如何查看 Google Play 服务版本?

android - 是否可以更改android单选按钮组中的单选按钮图标

android - 如何在 Android 中更改代理设置(尤其是在 Chrome 中)

android - 在 Android 中通过 Canvas 创建一个空位图并进行绘图

android - 如何在 Android 中模拟触摸事件?

android - 以编程方式获取设备的 Android API 级别?

android - 将 largeHeap 设置为 true 有什么好处?

android - 在非 Activity 类中获取上下文

android - 从 android 图库中选择多张图片

android - post方法到底是做什么的?