リスト内の各アイテムに異なる背景を使用することになっているナビゲーションドロワーに取り組んでいます。したがって、次のコード (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 です)、2 番目のクリックは上から計算され、3 番目は下から計算されます。ただし、これは反応する唯一の行です。このように (position
一番上の項目が選択されている場合は常に 0 に等しい) この行 (他に何もない??) は、同じ項目を複数回押すたびに実行され、上記のパターンの後に背景を表示する項目を変更します。これは、if(oldPs != position)
したがって:
1.どうしてこうなった?
2.Android 2.xでこれを機能させるにはどうすればよいですか?