Java 如何使列表页眉和页脚不可单击?

Java 如何使列表页眉和页脚不可单击?,java,android,Java,Android,我有一个有页脚和页眉的列表。我添加了onLongClick以从列表中删除项目。当我按下标题上的长键时,它会从列表中删除第一项。当我点击最后一个项目或页脚时,应用程序将崩溃-项目超出范围 我可以使页脚和页眉不可点击吗?或者我应该如何计算适配器中的项?或者有其他方法可以通过baypass吗? 删除项目: list.setOnItemLongClickListener(新的OnItemLongClickListener(){ 公共布尔值长单击(AdapterView父对象,视图v, 内部位置,长id)

我有一个有页脚和页眉的列表。我添加了onLongClick以从列表中删除项目。当我按下标题上的长键时,它会从列表中删除第一项。当我点击最后一个项目或页脚时,应用程序将崩溃-项目超出范围

我可以使页脚和页眉不可点击吗?或者我应该如何计算适配器中的项?或者有其他方法可以通过baypass吗?

删除项目:

list.setOnItemLongClickListener(新的OnItemLongClickListener(){
公共布尔值长单击(AdapterView父对象,视图v,
内部位置,长id){
//从列表中删除项目
ShoppingItem simpleItem=null;
如果(shoppingListApplication.getAdapter().getCount()>0){
simpleItem=(ShoppingItem)shoppingListApplication
.getAdapter().getItem(位置);
移除跳过项(simpleItem,
shoppingListApplication.getAdapter());
}
您必须使用和使ListView的页眉和页脚不可单击

只需对页眉和页脚传递
false
而不是
isSelectable

伪代码

listview.addHeaderView(header_view, null, false);
listview.addFooterView(footer_view, null, false);
您必须使用和使ListView的页眉和页脚不可单击

只需对页眉和页脚传递
false
而不是
isSelectable

伪代码

listview.addHeaderView(header_view, null, false);
listview.addFooterView(footer_view, null, false);

如果在ListView上添加列表标题,则适配器中第一项的索引为1。
如果未添加标题,则适配器中第一项的索引为0。

如果在ListView中添加列表标题,则适配器中第一项的索引为1。
如果未添加页眉,则适配器中第一项的索引为0。

对于
列表视图的
HeaderView
FooterView
中的独立上下文菜单

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();

    if (((AdapterContextMenuInfo)menuInfo).position == 1) {
        inflater.inflate(R.menu.foo1, menu);    // HEADER MENU
        return;
    }
    else if(((AdapterContextMenuInfo)menuInfo).position == listView.getAdapter().getCount() + 1) {
        inflater.inflate(R.menu.foo2, menu);    // FOOTER MENU
        return;
    }
    inflater.inflate(R.menu.foo3, menu);
}

对于
ListView
HeaderView
FooterView
中的单独上下文菜单

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater = getMenuInflater();

    if (((AdapterContextMenuInfo)menuInfo).position == 1) {
        inflater.inflate(R.menu.foo1, menu);    // HEADER MENU
        return;
    }
    else if(((AdapterContextMenuInfo)menuInfo).position == listView.getAdapter().getCount() + 1) {
        inflater.inflate(R.menu.foo2, menu);    // FOOTER MENU
        return;
    }
    inflater.inflate(R.menu.foo3, menu);
}

我这样做了,但它没有正常工作。(结果与我添加listview.addHeaderView(header_view))的结果相同。我这样做了,但它没有正常工作。(结果与我添加listview.addHeaderView(header_view)的结果相同)。好的,但当我单击列表中的1个项目时,我会删除列表中的1个项目,当我单击标题时,我会删除列表中的1个项目。这应该会有所不同。请在此处发布您的程序,这样我就可以回答。我猜您会在具有标题的列表视图中删除索引为0的项目。您应该使用logcat检查您单击的位置。当您单击列表vi时ew标题,OnItemLongClick(位置)的第三个参数将为0。适配器中位置为0的项不是ListHeader,而是一个项。因此,在使用position之前,请尝试使用1减少position。好的,但当我单击列表中的1项时,我将删除列表中的1项,当我单击header时,我将删除列表中的1项。它的工作方式应该不同。请在此处发布您的程序,以便我可以回答。我猜您删除了具有标题的ListView中索引为0的项。您应该使用logcat检查单击的位置。单击ListView标题时,OnItemLongClick(position)的第三个参数将为0。适配器中位置为0的项不是ListHeader,而是一个项。因此,在使用position之前,请尝试使用1减量position。