0

我有一个 ListView 并且我想更改默认的蓝色突出显示,当它设置为listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);自定义图像时,不仅在选择/按下项目时,而且还保持选择/按下此代码:

@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 以便我可以将单击的项目设置为自定义图像背景以指示“选定”状态?

4

3 回答 3

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);
}
于 2013-07-25T04:52:49.607 回答
1

请尝试使用您的列表视图的ListSelecter属性

例如:

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

    </ListView>
于 2013-07-25T04:52:26.583 回答
0

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

于 2013-07-25T04:36:19.323 回答