Android 如何在 setOnItemClickListener 中检测第二次点击

Android how to detect second click in setOnItemClickListener

我设法做到了 ListView 其中包含 TextView。如果单击 TextView 它将显示 ImageButton,否则第二次单击 ListView 中的 ImageButton 将隐藏。我的问题是我只能在第一次点击时显示 ImageButton,但当我再次点击 TextView 时我无法隐藏 ImageButton。任何解决这个问题的建议。

这是我的列表视图setontimeclicklistener

   condimentlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                      TextView condimentitem =(TextView)view.findViewById(R.id.condcb);
                      String citem= condimentitem.getText().toString();
                      ImageView btntick = (ImageView) view.findViewById(R.id.iv_tick);

                           int visibility = btntick.getVisibility();
                           if(visibility == View.VISIBLE)
                           {
                                      btntick.setVisibility(View.GONE);

                            }
                                      else if(visibility == View.GONE)
                            {
                                      btntick.setVisibility(View.VISIBLE);
                            }

                            ArrayList<String> data = new ArrayList<String>();
                            data.add(citem);
                            String array[] = data.toArray(new String[0]);
                            for (int j = 0; j < array.length; j++) {
                                       remark.append(String.valueOf(array[j]));
                            }

                        }
              });

如果 textView 单击,这将起作用。但是我不确定这是否可行,因为 textView 在 listView 中。

condimentitem.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if(btntick.getVisibility() == View.VISIBLE){
                    btntick.setVisibility(View.GONE);
                }else{
                    btntick.setVisibility(View.VISIBLE);
                }

            }
        });

我建议你在 adapter.

中写上 ImageViewTextView

正确的方法

适配器中写入class

public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = getLayoutInflater();
    View row = inflater.inflate(R.layout.your_activity, parent, false);
     .....
    condimentim.setOnClickListener(new OnClickListener() {
       @Override
        public void onClick(View v) {
            if(btntick.getVisibility() == View.VISIBLE){
                btntick.setVisibility(View.GONE);
            }else{
                btntick.setVisibility(View.VISIBLE);
            }

        }
    });
}

我希望这段代码能起作用:

condimentlist.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?>parent,View view,int position,long id){
            TextView condimentitem=(TextView)view.findViewById(R.id.condcb);
            String citem=condimentitem.getText().toString();
            ImageView btntick=(ImageView)view.findViewById(R.id.iv_tick);

            if(btntick.getVisibility==View.GONE){
            btntick.setVisibility(View.VISIBLE);
            }else{
            btntick.setVisibility(View.GONE);
            }

            ArrayList<String>data=new ArrayList<String>();
            data.add(citem);
            String array[]=data.toArray(new String[0]);
            for(int j=0;j<array.length;j++){
            remark.append(String.valueOf(array[j]));
            }

            }
            });

您可以使用布尔值作为开关,让您通过 if 语句来回切换。

boolean isClicked = true;

第一次点击使它为真,如果它为真则隐藏 ImageButton,第二次点击使布尔值为假并隐藏 ImageButton

if(true) 
ImageBtn.setVisibility(view.VISIBLE)
else
ImageBtn.setVisibility(view.GONE)

您可以使用 SparseIntArray 映射 listView 中每个项目的点击次数

在适配器构造函数中将数组初始化为

public LVAdapter(Context context, int resource, List<String> data) {
        super(context, resource);

        this.data = data;
        sba = new SparseBooleanArray(data.size());
    }

然后使用项目的位置作为键将点击次数存储在此数组中

public void onItemClick(...) {
         if(!sba.get(position)) // first click
            sba.put(position,true);
         else{ // second click
             // hide the view here
            sba.put(position, false); // reset the click if required
         }

  }