在我的应用中,我有一个listView
,其项目为选择模式为单项选择。当我单击一个项目时,其背景颜色变暗。当我再次单击它时,它仍然是深色背景。再次单击后,我希望它恢复到以前的背景色。
现在,我的解决方案是每次单击项目时都使用myList.setSelector(new ColorDrawable(Color.TRANSPARENT))
函数。
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
myList.setSelector(new ColorDrawable(getResources().getColor(R.color.gray_white)));
if (position==prePosition){
if(isSelected==UNSELECTED){
isSelected=SELECTED;
if (position>lock_listItems.size())
floatingActionButton.setVisibility(View.VISIBLE);
}
else{
isSelected=UNSELECTED;
floatingActionButton.setVisibility(View.INVISIBLE);
myList.setItemChecked(position,false);
//view.setBackgroundColor(getResources().getColor(R.color.white));
myList.setSelector(new ColorDrawable(Color.TRANSPARENT));
}
}
else {
isSelected=SELECTED;
if (position>lock_listItems.size())
floatingActionButton.setVisibility(View.VISIBLE);
else
floatingActionButton.setVisibility(View.INVISIBLE);
prePosition=position;
}
myList.forceLayout();
}
我认为这种解决方案不是那么有效。有更好的解决方案吗?
答案 0 :(得分:0)
采取arraylist
。
首先通过使用来检查点击位置是否位于arraylist
中
Collections.contains(position);
如果返回true,则不执行任何操作。否则做你的东西。您可以执行以下操作:
ArrayList<Integer> myPositionClickedList = new ArrayList<Integer>(); // this should be as global variable
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(!myPositionClickedList.contains(position)) {
myList.setSelector(new ColorDrawable(getResources().getColor(R.color.gray_white)));
//do your stuff here........
myPositionClickedList.add(position);
}
}