我能够在setOnItemClickListener中使用
更改单个listview项目的背景view.setBackgroundResource(R.color.green);
我只需要一次选择一个,所以当点击其他列表项时,我尝试了lv.invalidate()
和lv.getChildAt(0).invalidate()
但是没有工作,第二个导致空指针异常。有什么想法让颜色回来?
答案 0 :(得分:3)
您可以使用android.widget.ListView的clearChoices()
方法。
http://developer.android.com/reference/android/widget/AbsListView.html#clearChoices()
答案 1 :(得分:2)
我正在做一些分屏事情,xml选择器不起作用。为了重新设置颜色,我最终存储了View currentlySelectedView
中单击的视图,并在单击另一个视图时将背景设置为透明。
currentlySelectedView.setBackgroundResource(R.color.transparent);
答案 2 :(得分:1)
答案 3 :(得分:0)
我认为还有另一种“解决方法”值得一提。您可以为ListView创建一个自定义适配器类,它将为您选择(突出显示)或取消选择(取消选中)该项目。
//you can extend whatever kind of adapter you want
public class AutoSelectingListViewAdapter extends ArrayAdapter<Thingy>{
private LayoutInflater inflater;
public boolean shouldHighlight = false;
public int highlightIndex = -1;
public AutoSelectingListViewAdapter(Context context, int resourceId, List<Thingy> objects) {
super(context, resourceId, objects);
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ItemHolder holder = null;
if (convertView == null){
// always recycle!
holder = new ItemHolder();
convertView = inflater.inflate(R.layout.custom_list_item, null);
holder.clue = (TextView) convertView.findViewById(R.id.custom_list_item_text);
convertView.setTag(holder);
}else{
holder = (ItemHolder) convertView.getTag();
}
// fake highlighting!
if (shouldHighlight && highlightIndex == position){
convertView.setBackgroundColor(0xffb5bfcc); // put your highlight color here
}else{
convertView.setBackgroundColor(0x00000000); // transparent
}
Thingy thingy = this.getItem(position);
holder.clue.setText(thingy.textData);
return convertView;
}
class ItemHolder{
TextView text;
// any other views you need here
}
}
使用此类,您可以通过执行以下操作手动突出显示项目:
targetListView.setSelection(4); // give item 4 focus
AutoSelectingListViewAdapter myAdapter = (AutoSelectingListViewAdapter) targetListView.getAdapter();
myAdapter.highlightIndex = 4; // highlight item 4
myAdapter.shouldHighlight = true;
myAdapter.notifyDataSetChanged(); // force listview to redraw itself
你也可以不发光:
myAdapter.shouldHighlight = false;
myAdapter.notifyDataSetChanged();
答案 4 :(得分:0)
以下方法在OnItemClickListener.onItemClick
中对我有用,并清除了所选列表行:
adapter.notifyDataSetInvalidated();