如何检测何时第二次单击列表视图?
我已经做到了,当单击列表视图中的项目时,颜色设置为绿色。现在,我要的是再次单击即可更改颜色。
谁能解释我该怎么做?
在这里我将颜色设置为绿色:
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
parent.getChildAt(position).setBackgroundColor(Color.GREEN);
}
});
只需在您的侦听器中添加一个属性变量。像这样:
listView.setOnItemClickListener(new OnItemClickListener(){
private Set<Integer> hasClickedSet = new HashSet<Integer>();
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if (hasClickedSet.contains(position)){
v.setBackgroundColor(Color.BLACK);
} else {
v.setBackgroundColor(Color.GREEN);
hasClickedSet.add(position);
}
}
并且您不需要调用parent.getChildAt(position)。只需使用'v'参数即可。
========编辑============好的,试试这个:
listView.setOnItemClickListener(new OnItemClickListener(){
private SparseArray<Boolean> hasClicked = new SparseArray<Boolean>();
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if (hasClicked.get(position, false)){
v.setBackgroundColor(Color.RED);
hasClicked.put(position, false);
} else {
v.setBackgroundColor(Color.GREEN);
hasClicked.put(position, true);
}
}
如果您尝试修改单元格中的任何内容,则第二次点击将无法正常工作。为此,请尝试使您的监听器进入适配器,然后更改背景的颜色(convertView.setBackground(*))。对我来说,它的工作方式如下:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewHolder.addedButton.getVisibility() == View.INVISIBLE) {
viewHolder.addedButton.setVisibility(View.VISIBLE);
convertView.setBackground(any_color_you_want);
listener.onButtonAdd(v, position);
} else {
viewHolder.addedButton.setVisibility(View.INVISIBLE);
convertView.setBackground(any_color_you_want);
listener.onButtonRemove(v, position);
}
}
});
}
在此示例中,我试图创建可检查的列表。
尝试这种方式
Boolean flag=false;
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if(flag==false){
parent.getChildAt(position).setBackgroundColor(Color.GREEN);
flag=true;
}
else{
parent.getChildAt(position).setBackgroundColor(Color.RED);
flag=false;
}
}
});
您可以跟踪n次点击
int count = 0; // define globally
view.clickListener(){
count++;
if (count==1)
{
// first click
}
else{
// not first click
}
}
尝试这种方式,希望它可以帮助您解决问题。
点击HashMap保留所有位置和布尔值:
HashMap<Integer,Boolean> clickMap = new HashMap<Integer, Boolean>();
[检查HashMap包含此位置意味着此位置项基于更改背景以及HashMap中的布尔值单击了]:>
if(clickMap.containsKey(position) && clickMap.get(position)){
parent.getChildAt(position).setBackgroundColor(Color.orignal);
clickMap.put(position,false);
}else{
clickMap.put(position,true);
parent.getChildAt(position).setBackgroundColor(Color.GREEN);
}