我有一个导航抽屉。我已经以编程方式成功填充了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:新手警报!
答案 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中有一个不同的类。