单击HeaderView的事件实现

时间:2014-08-21 10:11:44

标签: android

我有一个导航抽屉。我已经以编程方式成功填充了ListView个项目,并为其分配了点击侦听器。 使用headerView函数在列表中添加项目时会出现问题。我像这样添加它

View headerView = View.inflate(this, R.layout.listview_item_row, null);
((ImageView) headerView.findViewById(R.id.imageViewIcon)).setImageDrawable(getResources().getDrawable(R.drawable.myimage));
((TextView) headerView.findViewById(R.id.textViewName)).setText("Text");
mDrawerList.addHeaderView(headerView);

现在,从技术上讲,headerview元素应该在以下代码中的position 0上执行:

public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    Fragment fragment = null;
    switch(position){
        case 0:
            fragment = new Fragment1();
            break;
        case 1:
            fragment = new Fragment2();
            break;
        case 2:
            fragment = new Fragment3();
            break;
    }
}

但最后一个元素的情况不起作用并给出ArrayOutOfBoundsException。 我以这种方式创建ListView项目:

ObjectDrawerItem[] drawerItem = new ObjectDrawerItem[3];
drawerItem[0] = new ObjectDrawerItem(R.drawable.ic_speedometer, mNavigationDrawerItemTitles[0]);
drawerItem[1] = new ObjectDrawerItem(R.drawable.ic_place, mNavigationDrawerItemTitles[1]);
drawerItem[2] = new ObjectDrawerItem(R.drawable.ic_price, mNavigationDrawerItemTitles[2]);

我哪里错了?如何制作适用于HeaderView以及最后ListView项的点击事件?

PS:新手警报!

2 个答案:

答案 0 :(得分:0)

为headderview实现单独的点击监听器,如下所示

View headerView = View.inflate(this, R.layout.listview_item_row, null);
((ImageView) headerView.findViewById(R.id.imageViewIcon)).setImageDrawable(getResources().getDrawable(R.drawable.myimage));
((TextView) headerView.findViewById(R.id.textViewName)).setText("Text");
mDrawerList.addHeaderView(headerView);
headerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // code to execute
            }
        });

答案 1 :(得分:0)

即使您向ListView添加标题视图或页脚视图,Android系统也会在内部将其作为子项处理。但是对于开发者来说,第一项(第0位)是列表视图的第一项(第0位)。 Android HeaderListViewAdapter中有一个不同的类。