我有類似的問題,並通過代碼解決它。它可能不是最聰明也不是最有效的解決方案,但是可以解決ListView繪圖問題,並且迄今爲止似乎運行良好。
活動文件:
private ListView listView;
private View selectedView;
private int selectedPosition;
private MyAdapter arrayAdapter;
...
// set a state machine for when a list item is clicked
listView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (selectedPosition == -1) {
// no item is selected, mark as selected
selectedView = view;
view.setBackgroundResource(R.drawable.bg_selected);
selectedPosition = position;
} else if (selectedPosition == position) {
// the same item is selected as the previous one, deselect
selectedView = null;
view.setBackgroundResource(R.drawable.bg_unselected);
selectedPosition = -1;
} else {
// another item is selected, deselect the previous and select the new one
selectedView.setBackgroundResource(R.drawable.bg_unselected);
selectedView = view;
view.setBackgroundResource(R.drawable.bg_selected);
selectedPosition = position;
}
arrayAdapter.setSelectedPosition(selectedPosition);
}
});
適配器代碼:
public class MyAdapter extends ArrayAdapter<MyObject> {
private int selectedPosition;
private static class ViewHolder {
RelativeLayout layout;
...
}
public void setSelectedPosition(int selectedPosition) {
this.selectedPosition = selectedPosition;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.layout = (RelativeLayout) convertView.findViewById(R.id.rl_item);
...
convertView.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
...
if (position == selectedPosition)
holder.layout.setBackgroundResource(R.drawable.bg_selected);
else
holder.layout.setBackgroundResource(R.drawable.bg_unselected);
...
return convertView;
}
...
}
希望它能幫助!
你只是想讓選擇器圖形顯示在點擊行上? (它不會如果行內的東西有自己的onClickListener) – FunkTheMonk
我認爲android:listSelector的想法是處理列表選擇(使用dpad在列表中移動),它不會影響已檢查的行。 – aromero
@FunkTheMonk,即時通訊試圖讓列表中的項目「突出顯示」或基本上改變點擊後的背景顏色,但我只需要一次「檢查」一個項目。 –