如何使用自定义图像(而不是选择器)更改ListView选择蓝色突出显示?

时间:2013-07-25 04:27:37

标签: android android-layout android-listview background-image selecteditem

我有一个ListView,我希望在设置为listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);时将默认的蓝色突出显示更改为自定义图像,不仅在选择/按下该项目时,还要保持此代码选择/按下: / p>

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    // TODO Auto-generated method stub
    v.setBackgroundResource(0);
    view.setBackgroundDrawable(getResources().getDrawable(
            R.drawable.list_item_highlight_short));
    v = view;
}

问题是,如果我的ListView中有20个项目,那么一些不在视图中的项目仍然会突出显示,并且不会包含在v.setBackgroundResource(0);

如何删除ListView中所有项目的BackgroundResource,以便我可以将单击的项目设置为自定义图像背景以指示“已选择”状态?

3 个答案:

答案 0 :(得分:2)

尝试覆盖适配器的getView方法。并且用这种方法做这项工作。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.Your_listview_layout, null);
    }

    if (listview.isItemChecked(position)) {                          
        v.setBackgroundResource(R.drawable.list_item_highlight_short);                                      
    } else {
        v.setBackgroundResource(0);                     
    }
    return super.getView(position, v, parent);
}

答案 1 :(得分:1)

请尝试使用listview的 ListSelecter 属性

例如:

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:listSelector="#0000ff" >

    </ListView>

答案 2 :(得分:0)

将单击的项目位置存储在适配器中。就像上面的函数adapter.setPosition(position)一样。然后在适配器的getView函数中,检查位置是否被选中,然后相应地更改背景