Android如何检测setOnItemClickListener中的第二次单击

时间:2017-03-13 06:25:29

标签: android listview onitemclicklistener

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

这是我的listview 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]));
                            }

                        }
              });

4 个答案:

答案 0 :(得分:2)

您可以使用布尔值作为开关,让您使用if语句来回翻转。

boolean isClicked = true;

首次单击使其成为true如果为true则隐藏ImageButton并且第二次单击make boolean as false并隐藏ImageButton

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

答案 1 :(得分:0)

如果点击了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);
                }

            }
        });

我建议你在ImageView内写TextViewadapter

正确的方法

将此内容写入适配器

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

        }
    });
}

答案 2 :(得分:0)

我希望这段代码能够运作:

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

            }
            });

答案 3 :(得分:0)

您可以使用 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
         }

  }