【问题标题】:Android fires both onclick and onlongclick on a short clickAndroid 触发 onclick 和 onlongclick 短按
【发布时间】:2011-10-13 20:31:12
【问题描述】:

人们感谢大家的想法。我现在感到很惭愧,问题出在听众身上,他们向使用开关的处理程序发送消息。那里缺少一个简单的 break 语句,导致程序按照它的方式运行。再次感谢您的宝贵时间。

我正在制作一个适配器类,用于存储通过火车旅行的快速旅行可能性。这是在列表中实现的。该列表包含一个删除按钮。如果按下该按钮,它将从列表中删除。如果触摸了其他东西,它应该打开另一个窗口,但如果长按它应该打开一个对话框来编辑当前设置。

问题在于,在短点击时,短点击和长点击侦听器都会触发。如果我长按,只会触发长按。

有没有人有任何建议/提示/答案?代码是:

public View getView(int position, View convertView, ViewGroup viewGroup) {
QuickTrips entry = quickTripList.get(position);

if(convertView == null) {
  LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  convertView = inflater.inflate(R.layout.quick_trip_list, null);
}

convertView.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    if(handler != null) {
      QuickTrips entry = (QuickTrips) v.getTag();
      Message msg = Message.obtain();
      msg.what = LAUNCH_QUICK_TRIP;
      msg.obj = entry;
      handler.sendMessage(msg);
    }
  }
});

convertView.setOnLongClickListener(new View.OnLongClickListener() {
  @Override
  public boolean onLongClick(View v) {
    QuickTrips entry = (QuickTrips) v.getTag();
    Message msg = Message.obtain();
    msg.what = EDIT_QUICK_TRIP;
    msg.obj = entry;
    handler.sendMessage(msg);
    return true;
  }
});

convertView.setTag(entry);

TextView text = (TextView) convertView.findViewById(R.id.text);
text.setText(entry.getFromTo());

Button remove = (Button) convertView.findViewById(R.id.remove);
remove.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    QuickTrips entry = (QuickTrips) v.getTag();
    quickTripList.remove(entry);
    notifyDataSetChanged();
  }
});
remove.setTag(entry);

return convertView;

}

好吧,我尝试通过导入 View.on... 来删除它,但没有成功。现在我尝试了 onTouchListener ...问题是它只在事件中被调用。开始使用计时器比它应该做的工作要多,不是吗?我只是不明白为什么短按会触发长按

来自 ontouchevent 的代码:

    convertView.setOnTouchListener(new OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    long downTime = event.getDownTime();
    long pressedTime = event.getEventTime();
    if(DEBUG) Log.i("qt", downTime + " en " + pressedTime);

    if(event.getAction() == MotionEvent.ACTION_DOWN) {
      if(DEBUG) Log.i("qt", "key down");
    }
    else if(event.getAction() == MotionEvent.ACTION_UP) {
      if(DEBUG) Log.i("qt", "key up");
      return true;
    } 
    else {
      if(DEBUG) Log.i("qt", "else"); //never called
    }

    return true; //if false then action up isn't called
  }
});

【问题讨论】:

  • 你怎么知道两人都被解雇了?
  • 您可以发布您的处理程序的代码吗?也许你错过了休息;当调用 switch(msg.what){ case LAUNCH_QUICK_TRIP: } ?

标签: android onclick onlongclicklistener


【解决方案1】:

尝试:

convertView.setOnLongClickListener(new OnLongClickListener() { 
        @Override
        public boolean onLongClick(View v) {
            // TODO Auto-generated method stub
            return true;
        }
    });

摘自here

【讨论】:

  • 这与他的问题有何不同?
  • 你使用 View.OnLongClickListener() ,也许神奇的事情会发生:D
  • View.OnLongClickListener() 与 OnLongClickListener() 相同。您发布的内容与他的代码相同,无法解决任何问题。
  • 为了确定而尝试了它,但它没有解决它(在没有 view.on 的情况下使用它......)现在用 ontouch 监听器尝试它......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
相关资源
最近更新 更多