0

我有这个特殊需要:

当我点击 a 时Button,我的一些项目ListView应该被突出显示——通常是一行或一系列行,而不是随机元素——通过更改背景颜色。android提供这样的功能吗?我想在我的自定义适配器中添加一个方法来设置行范围,然后添加一个签入getView方法来决定是设置标准还是突出显示背景,最后通知适配器数据已经改变,但我很确定有什么这允许这样做而无需重新填充整个ListView.

我知道多重选择,但我认为它完全不同,不是吗?

更新:使用list.getChildAt(pos).setBackgroundColor(Color.BLUE);I'm getting aNullPointerException因为它只包含可见的子项,而不是所有项目。没有替代解决方案吗?

UPDATE2:见我的回答。

4

3 回答 3

1

按下按钮时,使用以下代码突出显示列表项。将此代码放在按钮的 onClick 事件上。

listview.getChildAt(position).setBackgroundColor(Color.BLUE);
于 2013-09-24T12:26:19.970 回答
1

我的解决方案:

在 MyAdapter 类中:

private boolean highlighted = false;
private Integer from, to;
//....
public void setHighlight(int from, int to) {
    if ((this.from != null && this.from == from) && (this.to != null && this.to == to)) {
        highlighted = false;
        this.from = null;
        this.to = null;
    } else {
        highlighted = true;
        this.from = from;
        this.to = to;
    }
}
//...
@Override
public View getView(int pos, View v, ViewGroup vg) { 
    parsedLine entry = lines.get(pos);
    //...
    if (highlighted && pos>=from && pos<=to){
        v.setBackgroundColor(Color.parseColor(Theme.getHighlightColor()));
    } 
    //...
    return v;
}

然后在我想突出显示一些行的地方:

MyAdapter myadapter = (MyAdapter)mylist.getAdapter();
myadapter.setHighlight(from, to);
myadapter.notifyDataSetChanged();
mylist.setSelection(from);
于 2013-09-24T19:13:29.233 回答
-1

@Vektor88 - 请尝试更改一次

 final EditText input = new EditText(CLASSNAME.this);
于 2013-09-24T13:06:43.360 回答