无法“取消选择”listview项目

时间:2011-05-23 13:23:14

标签: android listview

我能够在setOnItemClickListener中使用

更改单个listview项目的背景
view.setBackgroundResource(R.color.green); 

我只需要一次选择一个,所以当点击其他列表项时,我尝试了lv.invalidate()lv.getChildAt(0).invalidate()但是没有工作,第二个导致空指针异常。有什么想法让颜色回来?

5 个答案:

答案 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)

将选择器设置为适配器中包含的视图的背景。在选择器中,您可以在按下,聚焦和取消按下项目时设置颜色。这是正确的方法。

                   

看一下这个帖子 Android ListView Selector Color

答案 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();