检测.setOnItemClickListener()中的第二次单击

时间:2014-11-05 08:50:40

标签: java android android-listview onitemclicklistener

如何检测第二次点击列表视图项目的时间?

我已经这样做了,当点击列表视图中的项目时,颜色设置为绿色。现在我想要的是第二次点击时改变的颜色。

任何人都可以解释我是如何做到的吗?

在我将颜色设置为绿色的地方:

        listView.setOnItemClickListener(new OnItemClickListener(){  
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id){

            parent.getChildAt(position).setBackgroundColor(Color.GREEN);

        }
    });

5 个答案:

答案 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);
}