只需短暂点击,Android即可点击onclick和onlongclick

时间:2011-10-13 20:31:12

标签: android onclick onlongclicklistener

人们感谢大家的想法。我现在感到非常惭愧,问题是听众的问题,他们向使用开关的处理程序发送消息。一个简单的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
  }
});

1 个答案:

答案 0 :(得分:0)

尝试:

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

摘自here