人们感谢你们的想法。我现在感到很惭愧,问题是听众没有,他们向使用开关的处理程序发送消息。其中缺少一个简单的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;

}
好吧,我试着移除了视图。在…但没有成功。现在我试着用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
  }
});

最佳答案

尝试:

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

摘自here

关于android - Android会在短按时触发onclick和onlongclick,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7760087/

10-09 12:59