Java 检测第二次单击。setOnItemClickListener()

Java 检测第二次单击。setOnItemClickListener(),java,android,android-listview,onitemclicklistener,Java,Android,Android Listview,Onitemclicklistener,如何检测第二次单击listview项目的时间 我这样做是为了在单击listview中的项目时,颜色设置为绿色。现在我想要的是第二次点击后颜色会重新改变 有人能解释一下我是怎么做到的吗 这里是我设置绿色的地方: listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> paren

如何检测第二次单击listview项目的时间

我这样做是为了在单击listview中的项目时,颜色设置为绿色。现在我想要的是第二次点击后颜色会重新改变

有人能解释一下我是怎么做到的吗

这里是我设置绿色的地方:

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

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

        }
    });
listView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
父.getChildAt(位置).setBackgroundColor(颜色.绿色);
}
});
试试这种方法

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

        }
    });
Boolean标志=false;
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(标志==false){
父.getChildAt(位置).setBackgroundColor(颜色.绿色);
flag=true;
}
否则{
父.getChildAt(位置).setBackgroundColor(颜色.红色);
flag=false;
}
}
});
试试这种方法

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

        }
    });
Boolean标志=false;
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(标志==false){
父.getChildAt(位置).setBackgroundColor(颜色.绿色);
flag=true;
}
否则{
父.getChildAt(位置).setBackgroundColor(颜色.红色);
flag=false;
}
}
});

您可以跟踪n次单击

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

您可以跟踪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<Integer,Boolean> clickMap = new HashMap<Integer, Boolean>();

只需在侦听器中添加一个属性变量。像这样:

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);
        }
}
listView.setOnItemClickListener(新的OnItemClickListener(){
私有集hasClickedSet=newHashSet();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(hasClickedSet.contains(位置)){
v、 setBackgroundColor(颜色:黑色);
}否则{
v、 setBackgroundColor(颜色:绿色);
已单击设置。添加(位置);
}
}
您不需要调用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);
            }
    }
listView.setOnItemClickListener(新的OnItemClickListener(){
private SparseArray hasClicked=新建SparseArray();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
if(hascacked.get(位置,false)){
v、 setBackgroundColor(颜色:红色);
hasClicked.put(位置,false);
}否则{
v、 setBackgroundColor(颜色:绿色);
hasClicked.put(位置,true);
}
}

只需在侦听器中添加一个属性变量。如下所示:

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);
        }
}
listView.setOnItemClickListener(新的OnItemClickListener(){
私有集hasClickedSet=newHashSet();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(hasClickedSet.contains(位置)){
v、 setBackgroundColor(颜色:黑色);
}否则{
v、 setBackgroundColor(颜色:绿色);
已单击设置。添加(位置);
}
}
您不需要调用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);
            }
    }
listView.setOnItemClickListener(新的OnItemClickListener(){
private SparseArray hasClicked=新建SparseArray();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
if(hascacked.get(位置,false)){
v、 setBackgroundColor(颜色:红色);
hasClicked.put(位置,false);
}否则{
v、 setBackgroundColor(颜色:绿色);
hasClicked.put(位置,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);
      }
    }
  });

}

在本例中,我尝试创建一个可检查列表。

如果您试图修改单元格中的任何内容,则第二次单击将无法工作。 为此,请尝试将侦听器置于适配器内,然后更改背景颜色(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);
      }
    }
  });

}

在这个例子中,我试图做一个可检查的列表。

当项目单击“基于设置其他背景颜色”时,检查背景颜色。这只是一个建议,取决于你最后想做什么,但你可以做一些类型的计数器,然后在inItemCLick中,只需观察有多少次单击,并在该函数中更改颜色。也许会有比这更好的方法,但同时你可以在“设置其他背景色”的基础上单击“项目”时将背景色移到“检查背景色”。这只是一个建议,取决于你最后想做什么,但你可以做一些类型的计数器,然后在inItemCLick中,只需观察单击的次数,然后进行更改功能中的颜色。可能会比这更好,但同时你可以向前移动。非常好!正是我想要的解决方案类型。谢谢!除了我必须点击项目两次。怎么了?你应该有多个标志。使用SparseArray存储每个项目视图的标志。非常好!例如行为