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

问题描述 投票:1回答:5

如何检测何时第二次单击列表视图?

我已经做到了,当单击列表视图中的项目时,颜色设置为绿色。现在,我要的是再次单击即可更改颜色。

谁能解释我该怎么做?

在这里我将颜色设置为绿色:

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

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

        }
    });
java android android-listview onitemclicklistener
5个回答
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'参数即可。

========编辑============好的,试试这个:

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

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

}

在此示例中,我试图创建可检查的列表。


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;
            }

        }
    });

0
投票

您可以跟踪n次点击

     int count = 0; // define globally
    view.clickListener(){
         count++;
         if (count==1)
            {
              // first click
            }
         else{
              // not first click
              }
    }

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.