【问题标题】:Android how to detect second click in setOnItemClickListenerAndroid如何检测setOnItemClickListener中的第二次点击
【发布时间】:2017-03-13 06:25:28
【问题描述】:

我设法做到了有一个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 和 image 按钮假设在 listView 中?
  • @JohnJoe 是的,文本视图和图像在列表视图中
  • 嘿,更好的方法是将它作为布尔值保存在您的列表对象中,并根据该变量使其可见或不可见。您可以更改变量 onclick 并调用 datachangelistener
  • 等等!什么?如果你的按钮可见性消失了,你怎么能点击它?
  • 只是图片按钮GONE,listview按钮控制图片按钮是显示还是隐藏

标签: android listview onitemclicklistener


【解决方案1】:

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

boolean isClicked = true;

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

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

【讨论】:

  • 这要好得多,因为此页面上的下一项将与第一项具有相同的状态。那将是可怕的。
【解决方案2】:

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

            }
        });

我建议你将ImageViewTextView 写在adapter 中。


正确的方法

把这个写在 Adapter 类中

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

        }
    });
}

【讨论】:

  • 无法点击隐形/消失按钮
  • @hakim 根据代码,是ImageView,不是button
  • 它可以工作,但是如果我在我的适配器中设置它,当我单击每一行值时我将无法获得该值
  • 还是可以得到行值
  • 如何通过适配器获取值?
【解决方案3】:

我希望这段代码能正常工作:

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

            }
            });

【讨论】:

    【解决方案4】:

    您可以使用 SparseIntArray 映射列表视图中每个项目的点击次数

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2020-03-09
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多