如何检测第二次点击列表视图项目的时间?
我已经这样做了,当点击列表视图中的项目时,颜色设置为绿色。现在我想要的是第二次点击时改变的颜色。
任何人都可以解释我是如何做到的吗?
在我将颜色设置为绿色的地方:
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
parent.getChildAt(position).setBackgroundColor(Color.GREEN);
}
});
答案 0 :(得分:5)
如果您尝试修改单元格中的任何内容,则无法进行第二次单击。 为此,尝试在适配器中创建侦听器,然后更改背景的颜色(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);
}
}
});
}
在这个例子中,我试图做一个可检查列表。
答案 1 :(得分:2)
试试这种方式
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;
}
}
});
答案 2 :(得分:1)
只需在监听器中添加属性变量即可。像这样:
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'参数。
====== EDIT ============ 好的,试试这个:
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);
}
}
答案 3 :(得分:0)
您可以跟踪n次点击
int count = 0; // define globally
view.clickListener(){
count++;
if (count==1)
{
// first click
}
else{
// not first click
}
}
答案 4 :(得分:0)
请尝试这种方式,希望这有助于您解决问题。
获取包含所有位置和布尔值的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);
}