关于 用listview的setOnItemSelectedListener 选中时改变背景

先贴下我的代码
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
v.setBackground(null);
} else {
if (categoryIndex == lastLeftPosition) {
v.setBackground(JukeboxApp.getInstance().loadBitDrawable.getBd_left_click());
} else
v.setBackground(JukeboxApp.getInstance().loadBitDrawable.getBd_left_normal());
}
}
};

listViewLeft.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            view.setOnFocusChangeListener(onFocusChangeListener);

                Log.e("aaaaaaaaaa", "songcasetnull 2"+ view.hasFocus());                

打印出的结果是 view.hasFocus() 返回false 想请问这里是为什么,要怎么解决呀

view.setOnFocusChangeListener(onFocusChangeListener);只是设置了监听器,但是你并没有使view获得焦点啊,可以试一下调用view.requestFocus()来获取焦点

那个只是点击事件,你需要在adapter里面创建一个Vector数组记录每条栏目的选中状态,然后点击每个栏目是修改背景颜色就行 public void changeState(int pos) {
if(lastPosition != -1)
vector.setElementAt(false, lastPosition); //取消上一次的选中状态
vector.setElementAt(!vector.elementAt(pos), pos); //直接取反即可
lastPosition = pos; //记录本次选中的位置
notifyDataSetChanged(); //通知适配器进行更新
}
上面是修改选中的颜色,下面是选择之后的颜色和没选中的颜色
if (vector.elementAt(position) == true) {
holder.mRelativeLayout.setBackgroundDrawable(drawable1);
holder.textView.setTextColor(Color.parseColor("#306903"));
} else {
//其他的恢复原来的状态
holder.mRelativeLayout.setBackgroundDrawable(drawabledrow);
holder.textView.setTextColor(Color.parseColor("#FFFFC7"));
}