我拥有的内容:带有自定义适配器的自定义列表视图,带有自定义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根本不起作用。
此外,填充列表视图时,正确设置背景颜色(使用相同的资源和相同的功能)。
提前致谢。
更新
看起来背景会改变,但仅在屏幕被迫重新绘制时才会改变。例如,当您单击列表中的第一个项目将其变为蓝色时,您需要向下滚动(将其从屏幕上移开),然后向上滚动。然后它变成了蓝色。我们可以以某种方式避免这种情况吗?
答案 0 :(得分:1)
使用AdapterView.OnItemSelectedListener()
,可能是view.setBackgroundDrawable(getResources().getDrawable(R.drawable.listview_item_selected));
编辑:
使布局无效而不是个别视图。