Android ListView OnItemClick更改视图属性

时间:2011-02-05 23:49:50

标签: android android-listview

我拥有的内容:带有自定义适配器的自定义列表视图,带有自定义ListViewItem(扩展了LinearLayout)

我想做什么:当选择了列表框项目时,我想更改所选视图的背景可绘制。

发生了什么:目前没有。 Toast确实应该出现,但Background drawable不会改变。我尝试调用View.Invalidate(),但似乎也没有做任何事情。

以下是应该更改drawable的代码片段:

public void onItemClick(AdapterView<?> arg0, View view, int index, long arg3) 
{
    Card card = CardVM.GetCurrentCards().get(index);
    card.setBlocked(!card.isBlocked());
    if (card.isBlocked())
    {
        view.setBackgroundResource(R.drawable.bluegradient);
        Toast.makeText(this, "Card is now Blocked", 1).show();
    }
    else
    {
        view.setBackgroundResource(R.drawable.greengradient);
        Toast.makeText(this, "Card is now Available", 1).show();
    }
}

切换功能确实有效,如果您第一次点击它,它会说“卡现在被阻止”。第二次显示“卡现在可用”......等等。 setBackgroundResource根本不起作用。

此外,填充列表视图时,正确设置背景颜色(使用相同的资源和相同的功能)。

提前致谢。

更新

看起来背景会改变,但仅在屏幕被迫重新绘制时才会改变。例如,当您单击列表中的第一个项目将其变为蓝色时,您需要向下滚动(将其从屏幕上移开),然后向上滚动。然后它变成了蓝色。我们可以以某种方式避免这种情况吗?

1 个答案:

答案 0 :(得分:1)

使用AdapterView.OnItemSelectedListener(),可能是view.setBackgroundDrawable(getResources().getDrawable(R.drawable.listview_item_selected));

编辑:

使布局无效而不是个别视图。