【问题标题】:OnClick is called instead of onLongClick调用 OnClick 而不是 onLongClick
【发布时间】:2015-03-18 09:20:46
【问题描述】:

我只在 moto g 第二代设备 中遇到这个问题。此代码在其他设备上运行良好。

我已经在 lisview 的项目上实现了 onClickonLongClick 内部适配器。但是当我长按任何项目时,会调用 onClick 而不是 onLongClick。 如果我缓慢滚动列表视图,也会调用 onClick。

getView() 内的代码如下:

LayoutInflater inflater = (LayoutInflater)parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        lifeActionObj = actionList.get(position);

        View v = (View)inflater.inflate(R.layout.single_action, null);

        TextView actionNameView = (TextView) v.findViewById(R.id.action_name);
        ImageView actionIcon = (ImageView) v.findViewById(R.id.action_icon);
        final Button aInfoBtn = (Button) v.findViewById(R.id.action_info);
        final Button aPickBtn = (Button) v.findViewById(R.id.action_pick);



        final int actionLocked = lifeActionObj.isLocked();


        aPickBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                if(actionLocked ==1)
                {
                    diplayDialog();
                }
                else
                {
                    LifeUser lifeUser = new LifeUser();
                    try {
                        LifeAction lifeActionObj = actionList.get(position);
                        int result = lifeUser.addHabit(traitId, lifeActionObj);

                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }

                    actionActivity.finish();
                }
            }
        });

        aInfoBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if(actionLocked ==1)
                {
                    diplayDialog();
                }
                else
                {
                    Intent in = new Intent(actionActivity,
                            DisplayHtmlActivity.class);
                    try
                    {
                        in.putExtra("title", actionList.get(position).getDisplayName());
                        in.putExtra("fileName", actionList.get(position).getActionInfoFileName(actionActivity.getLifeTraitObject().getTraitId())+".html");
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                    actionActivity.startActivity(in);
                }
            }
        });

        final ViewGroup parent1 = parent;
        final View ex = v;

        v.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Toast.makeText(actionActivity, "on click", Toast.LENGTH_SHORT).show();
                if(actionActivity.getActionMode() != null)
                {
                    actionActivity.getActionMode().finish();
                }

                if(actionLocked == 1)
                {
                    diplayDialog();
                }
            }
        });


        v.setOnLongClickListener(new OnLongClickListener() 
        {
            @Override
            public boolean onLongClick(View v) {
                Toast.makeText(actionActivity, "on long click", Toast.LENGTH_SHORT).show();
                if(actionLocked == 1)
                {
                    return false;
                }
                else
                {
                    ex.setBackgroundColor(Color.LTGRAY);
                    ex.setLongClickable(false);
                    ex.setClickable(false);
                    parent1.setClickable(false);
                    aInfoBtn.setClickable(false);
                    aPickBtn.setClickable(false);
                    final int traitPosition = position;

                    try {
                        actionActivity.startActionMode(new LifeCAB(
                                ex,
                                parent1,
                                traitPosition,
                                aInfoBtn,
                                aPickBtn,
                                actionList.get(position).getDisplayName()));
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return true;
                }

            }
        });

        return v;

谁能告诉我这可能是什么原因?请指导我解决这个问题。

【问题讨论】:

    标签: android android-listview scroll onclicklistener onlongclicklistener


    【解决方案1】:

    在您的片段或 MainActivity 中,使用 OnLongClickListener 实现它

    // 片段在我的情况下

    public class Returning extends Fragment implements OnLongClickListener
    

    在实现它时,它会要求您覆盖

    @Override
    public boolean onLongClick(View v) {
        // TODO Auto-generated method stub
        Log.e("ServiceHandler", "Couldn't get any data from the url");
        return true;
    }
    

    然后在 oncreateview(在片段的情况下)或 oncreate 在活动的情况下执行此操作

    view.setOnLongClickListener(this);
    

    试过了,对我有用

    【讨论】:

    • 此代码适用于除 moto g 第二代以外的所有手机。
    • 好吧,实际上我没有 moto g,所以无法弄清楚这种行为的真正原因。当您找到解决方案时,请告诉我们。谢谢
    【解决方案2】:

    您可以使用 OnTouchListener 代替 OnClick 和 OnLongClick。它将带您在适配器内部工作。 同样对于 ListView,您应该使用 OnItemLongClickListener 和 OnItemClickListener。

    【讨论】:

      【解决方案3】:

      检查以下代码行并尝试理解逻辑,您必须在onlongclick中返回true。

      item.setOnClickListener(new View.OnClickListener() 
      {
          @Override
          public void onClick(View v) 
          {
              // TODO Auto-generated method stub
              Toast.makeText(getBaseContext(), "Clicked", Toast.LENGTH_SHORT).show();
          }
      });
      
      
      item.setOnLongClickListener(new View.OnLongClickListener() {
      
          @Override
          public boolean onLongClick(View v) {
              // TODO Auto-generated method stub
              Toast.makeText(getBaseContext(), "Long Clicked", Toast.LENGTH_SHORT).show();
              return true;
          }
      });
      

      【讨论】:

      • 我没有发现任何变化。上面的代码也返回 true。此外,此代码不适用于 moto g 第二代设备。
      猜你喜欢
      • 2011-11-12
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多