我正在开发一个导航抽屉,它应该为列表中的每个项目使用不同的背景。因此我使用以下代码(onClick):
private class NavBarClickHandler implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView parent, View view, int position,
long id) {
selectItem(position);
}
}
private void selectItem(int position) {
if(oldPos != position)
{
oldPos = position;
cont.removeAllViews();
for(int i = 0; i < leftBar.getChildCount(); i++)
leftBar.getChildAt(i).setBackgroundColor(Color.parseColor("#111111"));
setTitle(leftBarEntries[position]);
leftBar.getChildAt(position).setBackgroundColor(Color.parseColor(colorArray[position%colorArray.length]));
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(colorArray[position%colorArray.length])));
switch (position) {
case 0:
cont.addView(LI.inflate(R.layout.hem, cont, false));
break;
case 1:
cont.addView(LI.inflate(R.layout.hem, cont, false));
break;
case 2:
cont.addView(LI.inflate(R.layout.kalender, cont, false));
break;
case 3:
cont.addView(LI.inflate(R.layout.kalender, cont, false));
break;
}
}
whole.closeDrawer(leftBar);
}
这很好用......在android 3.0及更高版本上。然而,当代码在基于 Android 2.x 的模拟器上运行时,该部分
leftBar.getChildAt(position).setBackgroundColor(Color.parseColor(colorArray[position%colorArray.length]));
设置正确的背景颜色,但设置错误的项目。
我的测试表明,在第一次点击时,getChild 是从底部计算的(意味着顶部项目是第 3 项,底部项目是第 0 项),第二次点击是从顶部计算,从底部计算第三次等。但是这是唯一的反应线这种方式(position
选择顶部项目时始终等于 0) 每次多次按下同一个项目时也会执行此行(没有别的??),更改在上述模式之后显示背景的项目。这应该通过if(oldPs != position)
所以:
1.为什么会这样?
2.我怎样才能使它适用于android 2.x?